我试图在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;
/
使用变量:
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;
/