我想创建一个本地FUNCTION,它在我的PROCEDURE中将结果作为NESTED TABLE返回。然后,我希望在SELECT查询中使用另一个表来加入嵌套表,如下所示:
PROCEDURE TEST_DEPID (SOR IN OUT SYS_REFCURSOR) AS
TYPE TAB IS TABLE OF HR.EMPLOYEES.SALARY%TYPE
INDEX BY BINARY_INTEGER;
FUNCTION GET_SALARY (P_DEPARTMENT_ID NUMBER)
RETURN TAB
IS RETURN_TBL TAB;
BEGIN
SELECT SALARY
BULK COLLECT INTO RETURN_TBL
FROM HR.EMPLOYEES WHERE DEPARTMENT_ID = TRIM(P_DEPARTMENT_ID);
RETURN RETURN_TBL;
END GET_SALARY;
BEGIN
OPEN SOR FOR
SELECT * FROM HR.EMPLOYEES JOIN TABLE (GET_SALARY('60')) B ON A.SALARY = B.SALARY;
END;
我得到的错误是:
[1]:(Error): PLS-00231: function 'GET_SALARY' may not be used in SQL
[2]:(Error): PL/SQL: ORA-00904: : invalid identifier
[3]:(Error): PL/SQL: SQL Statement ignored
请给我一些建议。
答案 0 :(得分:1)
SELECT内部不能使用本地函数。只有全局功能才能运作。
Oracle使用2个运行SQL和PL / SQL的引擎。运行SELECT SQL引擎可以访问所有函数,但前提是它们是公知的。公众不了解当地的职能。