我正在执行以下操作,但没有用
select package_name.function_name(param,param) from dual
我正在调用一个返回游标的函数,所以我猜"from dual"是问题所在
"from dual"
还有另一种方法吗?
我认为您的意思是参考光标。这是一个PL / SQL构造,用作指向查询返回的一组记录的指针。这意味着它必须由运行查询的客户端解释。例如,我们可以将Ref Cursor映射到JDBC或ODBC ResultSet。
您的基本声明当然没有错。这是一个类似于您自己的函数:
SQL> desc get_emps FUNCTION get_emps RETURNS REF CURSOR Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- P_DNO NUMBER(2) IN P_SORT_COL VARCHAR2 IN DEFAULT P_ASC_DESC VARCHAR2 IN DEFAULT SQL>
我可以在更广泛的PL / SQL块中轻松地调用它:
SQL> declare 2 rc sys_refcursor; 3 begin 4 rc := get_emps(50); 5 end; 6 / PL/SQL procedure successfully completed. SQL>
但是,SQL * PLus可以本地处理CURSOR构造:
SQL> select get_emps(50) from dual 2 / GET_EMPS(50) -------------------- CURSOR STATEMENT : 1 CURSOR STATEMENT : 1 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 8060 VERREYNNE PLUMBER 8061 08-APR-08 4000 50 8061 FEUERSTEIN PLUMBER 7839 27-FEB-10 4500 50 8085 TRICHLER PLUMBER 8061 08-APR-10 3500 50 8100 PODER PLUMBER 8061 3750 50 SQL>
该语句还可以在SQL Developer中运行,尽管结果集的布局很 丑陋 。
因此,如果您在功能方面遇到问题,则问题是:
阅读了关于该主题的其他问题后,我认为问题可能是由于使用了用户定义的Ref Cursor(而不是内置的)。但是,这没有任何区别。此打包功能:
SQL> create or replace package emp_rc_utils as 2 3 type emp_rc is ref cursor return emp%rowtype; 4 5 function get_emps 6 ( p_dno in emp.deptno%type 7 ) 8 return emp_rc; 9 end; 10 / Package created. SQL> create or replace package body emp_rc_utils as 2 3 function get_emps 4 ( p_dno in emp.deptno%type 5 ) 6 return emp_rc 7 is 8 return_value emp_rc_utils.emp_rc; 9 begin 10 11 open return_value for select * from emp where deptno = p_dno; 12 13 return return_value; 14 end get_emps; 15 16 end emp_rc_utils; 17 / Package body created. SQL>
仍然有效…
SQL> declare 2 rc sys_refcursor; 3 begin 4 rc := emp_rc_utils.get_emps(50); 5 end; 6 / PL/SQL procedure successfully completed. SQL> select emp_rc_utils.get_emps(50) from dual 2 / EMP_RC_UTILS.GET_EMP -------------------- CURSOR STATEMENT : 1 CURSOR STATEMENT : 1 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 8085 TRICHLER PLUMBER 8061 08-APR-10 3500 50 8060 VERREYNNE PLUMBER 8061 08-APR-08 4000 50 8061 FEUERSTEIN PLUMBER 7839 27-FEB-10 4500 50 8100 PODER PLUMBER 8061 3750 50 SQL>