Я хочу передать курсор из одной процедуры в другую. - PullRequest
0 голосов
/ 03 мая 2018

У меня есть 2 процедуры, такие как

PROCEDURE proc1(param1 in varchar2, param2 out sys_refcursor)
:
:
:
END proc1;

PROCEDURE proc2(param3 in sys_refcursor)
:
:
:
END proc2;

И что я хочу сделать, это

PROCEDURE proc3()
:
:
proc1(p1, p2);
proc2(p2);
:
:
END proc3;

но я получаю код ошибки -29471 У кого-нибудь есть идея? Спасибо

1 Ответ

0 голосов
/ 03 мая 2018

Кажется, вы используете его неправильно и не показали ту часть кода, которая действительно вызывает ошибку. Это пример того, как я это сделаю, и все работает отлично.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...