函数在SELECT查询中返回TABLE和JOIN?

时间:2014-09-11 09:46:09

标签: sql oracle

我想创建一个本地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

请给我一些建议。

1 个答案:

答案 0 :(得分:1)

SELECT内部不能使用本地函数。只有全局功能才能运作。

Oracle使用2个运行SQL和PL / SQL的引擎。运行SELECT SQL引擎可以访问所有函数,但前提是它们是公知的。公众不了解当地的职能。