stored - recorrer sys_refcursor oracle
Error al imprimir la variable REFCURSOR como parĂ¡metro OUT en el procedimiento en Oracle 11g (1)
Estoy usando Oracle (Oracle 11.1.0.7.0). Creé un procedimiento almacenado de muestra dentro de un paquete MyPackage. Ingresé como usuario "DBA_USER" para crear este SP.
PROCEDURE WT_MANAGEMENT_PRODUCTIVITY
(
cur_output Out T_CURSOR
)AS
sqlstr VARCHAR2(5000);
BEGIN
Sqlstr:=''select sysdate from dual'';
Open cur_output For Sqlstr;
END WT_MANAGEMENT_PRODUCTIVITY;
Intenté llamar a este SP usando
var r ref cursor;
exec MyPackage.WT_MANAGEMENT_PRODUCTIVITY(:r);
print r;
Pero arroja el siguiente error en Oracle SQL Developer
Usage: VAR[IABLE] [ <variable> [ NUMBER | CHAR | CHAR (n [CHAR|BYTE]) |
VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) |
NVARCHAR2 (n) | CLOB | NCLOB | REFCURSOR |
BINARY_FLOAT | BINARY_DOUBLE ] ]
Error starting at line 2 in command:
exec MyPackage.WT_MANAGEMENT_PRODUCTIVITY(:r);
Error report:
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to ''WT_MANAGEMENT_PRODUCTIVITY''
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:/n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
r
------
EDIT1:
T_CURSOR es tipo:
TYPE T_CURSOR IS REF CURSOR;
var r ref cursor;
Lo anterior es sintácticamente incorrecto. Debería ser -
var r refcursor
No hay espacio entre el cursor de referencia, es una palabra, refcursor
.
Por ejemplo,
SQL> create table t as select * from emp;
Table created.
SQL> var r refcursor
SQL>
SQL> begin
2 open :r for select * from t;
3 end;
4 /
PL/SQL procedure successfully completed.
SQL>
SQL> delete from t;
14 rows deleted.
SQL> commit;
Commit complete.
SQL>
SQL> print r
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7369 SMITH CLERK 7902 17-DEC-80 800
20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300
30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500
30
7566 JONES MANAGER 7839 02-APR-81 2975
20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400
30
7698 BLAKE MANAGER 7839 01-MAY-81 2850
30
7782 CLARK MANAGER 7839 09-JUN-81 2450
10
7788 SCOTT ANALYST 7566 09-DEC-82 3000
20
7839 KING PRESIDENT 17-NOV-81 5000
10
7844 TURNER SALESMAN 7698 08-SEP-81 1500
30
7876 ADAMS CLERK 7788 12-JAN-83 1100
20
7900 JAMES CLERK 7698 03-DEC-81 950
30
7902 FORD ANALYST 7566 03-DEC-81 3000
20
7934 MILLER CLERK 7782 23-JAN-82 1300
10
14 rows selected.
SQL>