【发布时间】:2026-01-09 04:50:01
【问题描述】:
尝试在我的架构中的函数内使用来自另一个架构的函数时,我收到“ORA-00904 无效标识符”错误。我正在使用函数的完全限定名称,并且通过授予的角色对函数具有执行权限。
直接从我的架构中执行该函数是可行的。但是从我的架构中的函数调用该函数不会,并且会出现 904 错误。
示例:
我正在尝试在一个名为 schema_A 的模式中编译一个名为 proc_A 的过程。
proc_A 使用来自 schema_B 的名为 proc_B 的函数的输出。
schema_A 可以通过角色访问 proc_B。 schema_A 能够直接运行 proc_B,但不能在函数/过程中使用它。在过程中使用它会导致编译失败。
下面是演示问题的代码示例:
CREATE OR REPLACE FUNCTION schema_b.proc_b
RETURN DATE IS
BEGIN
RETURN sysdate;
END;
/
CREATE ROLE run_query
/
GRANT EXECUTE ON schema_b.proc_b TO run_query
/
GRANT run_query TO schema_a
/
-- this will fail to compile with the ORA-904 invalid identifier error
CREATE OR REPLACE FUNCTION schema_a.proc_a
RETURN NUMBER IS
BEGIN
FOR c IN (SELECT schema_b.proc_b() FROM dual) LOOP --> this function call causes the error
NULL;
END LOOP;
RETURN 5;
END;
/
运行 Oracle 11g R2
【问题讨论】: