【发布时间】:2020-03-18 19:29:37
【问题描述】:
我试图在 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;
/
【问题讨论】:
-
这就是为什么我总是将语句生成到变量中,然后执行恐吓变量名。当出现问题时,我可以输出尝试的实际语句。然而,对于这个;您实际上有一个模式名称 USER 吗?如果您的光标有结果,这是必要的 - 非常糟糕的计划。更重要的是,您是否有一个模式“NEW_USER”,因为这是您尝试创建同义词的地方。错误消息暗示架构“NEW_USER”不存在。如果 t_object_name 的值为 null(空),您将收到错误“ORA-00995:缺少或无效的同义词标识符”。