For Loop Twice Oracle中的访问值

问题描述 投票:0回答:1

我试图在for循环中两次访问列值。在询问之前,我确实试图自己解决这个问题,但是Oracle和/或PL / SQL并不是我的强项。第一次在该行中访问该值。第二次将其显示为空的单个括号''。任何帮助,将不胜感激。

BEGIN

   FOR t IN (SELECT object_name, object_type FROM all_objects WHERE owner='USER' AND object_type IN ('TABLE','VIEW','PROCEDURE','FUNCTION','PACKAGE','PACKAGE BODY','LOB','SEQUENCE','SYNONYM','TYPE')) LOOP

     IF t.object_type IN ('SYNONYM') THEN
       --the second time t.object_name is called in line below it is empty.
       EXECUTE IMMEDIATE 'CREATE OR REPLACE SYNONYM NEW_USER.'||t.object_name||' FOR USER.'||t.object_name||'';

     END IF;

   END LOOP;

END;

/

oracle plsql sqlplus
1个回答
0
投票

使用变量:

DECLARE
   t_name VARCHAR2(30);

BEGIN

   FOR t IN (SELECT object_name, object_type FROM all_objects 
             WHERE owner='USER' 
               AND object_type IN ('TABLE','VIEW','PROCEDURE'
                                   ,'FUNCTION','PACKAGE','PACKAGE BODY'
                                   ,'LOB','SEQUENCE','SYNONYM','TYPE')) 
LOOP
     t_name:=t.object_name;
     IF t.object_type IN ('SYNONYM') THEN

       --the second time t.object_name is called in line below it is empty.
       EXECUTE IMMEDIATE 'CREATE OR REPLACE SYNONYM NEW_USER.'||t_name||' FOR USER.'||t_name||'';
     END IF;
   END LOOP;
END;
 /
© www.soinside.com 2019 - 2024. All rights reserved.