我创建了一个包,该包在同一页面内的 SELECT 语句中执行我的函数:
CREATE OR REPLACE PACKAGE p
AUTHID DEFINER
IS
FUNCTION f
RETURN NUMBER;
END;
/
CREATE OR REPLACE PACKAGE BODY p
IS
FUNCTION ff RETURN NUMBER
IS
BEGIN
RETURN 73;
END;
FUNCTION f RETURN NUMBER
IS
l_number NUMBER;
BEGIN
SELECT 42 INTO l_number
FROM DUAL
WHERE ff () = 73;
RETURN l_number;
END;
END;
/
BEGIN
DBMS_OUTPUT.put_line (p.f);
END;
/
Run Code Online (Sandbox Code Playgroud)
但是当我尝试执行该函数时,出现 PLS-00231 编译错误:
BEGIN
dbms_output.put_line (P.F);
END;
/
PLS-00231: function 'FF' may not be used in SQL
Run Code Online (Sandbox Code Playgroud)
该函数就在那里声明。它不执行任何非查询 …
我在匿名块中有很多代码,我担心PL/SQL优化器不会优化该代码.我应该将我的代码从匿名块移动到包中以确保优化器为我完成所有繁重的工作吗?