Кажется, вы используете его неправильно и не показали ту часть кода, которая действительно вызывает ошибку. Это пример того, как я это сделаю, и все работает отлично.
SET SERVEROUTPUT ON
DECLARE
x NUMBER;
y VARCHAR2(100);
p1 VARCHAR2(5) := 'YES';
p2 SYS_REFCURSOR;
PROCEDURE proc1(param1 IN VARCHAR2,
param2 OUT SYS_REFCURSOR)
IS
BEGIN
OPEN param2 FOR
SELECT 1 id,
'abc' n
FROM dual
WHERE param1 = 'YES';
END proc1;
PROCEDURE proc2(param3 IN SYS_REFCURSOR)
IS
BEGIN
FETCH param3 INTO x, y;
dbms_output.put_line('x = '
||x
||',y = '
||y);
END proc2;
BEGIN
proc1(p1, p2);
proc2(p2);
END;
/
PL/SQL procedure successfully completed.
x = 1,y = abc