Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Не закрывается sys_refcursor  [new]
serg4321
Member

Откуда: Санкт-Петербург
Сообщений: 133
Всем добрый день!

Подскажите, пожалуйста, почему код в первом случае не работает, а во втором работает?

declare
 s sys_refcursor;
  
 procedure proc(proc_s out sys_refcursor)
 as
 begin
  open proc_s for 'select * from dual';
 end;
  
 procedure main_proc(main_proc_s out sys_refcursor)
 as
 begin
  proc(main_proc_s);
 end;

begin
 main_proc(s);
 
 close s;
end;
/

ORA-01001: invalid cursor
ORA-06512: at line 21


-------------------------------------------------

declare
 s sys_refcursor;
 
 procedure proc(proc_s out sys_refcursor)
 as
 begin
  open proc_s for 'select * from dual';
 end;
 
 procedure main_proc(main_proc_s out sys_refcursor)
 as
 begin
  proc(main_proc_s); --<<<< Изменение только здесь!
 end;

begin
 proc(s);
 
 close s;
end;
/

PL/SQL procedure successfully completed

В доке на эту тему ничего не нашел... Заранее спасибо за ответы!
7 мар 07, 10:16    [3873565]     Ответить | Цитировать Сообщить модератору
 Re: Не закрывается sys_refcursor  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18385
Рецепт от Elic:
SQL> declare
  2   s sys_refcursor;
  3  
  4   procedure proc(proc_s out sys_refcursor)
  5   as
  6   begin
  7    open proc_s for 'select * from dual';
  8   end;
  9  
 10   procedure main_proc(main_proc_s out sys_refcursor)
 11   as
 12   begin
 13    open main_proc_s for 'select 1 a from dual';
 14    close main_proc_s;
 15    proc(main_proc_s);
 16   end;
 17  
 18  begin
 19   main_proc(s);
 20  
 21   close s;
 22  end;
 23  /

PL/SQL procedure successfully completed

SQL> 
7 мар 07, 10:23    [3873632]     Ответить | Цитировать Сообщить модератору
 Re: Не закрывается sys_refcursor  [new]
serg4321
Member

Откуда: Санкт-Петербург
Сообщений: 133
Сорри, описался

declare
 s sys_refcursor;
  
 procedure proc(proc_s out sys_refcursor)
 as
 begin
  open proc_s for 'select * from dual';
 end;
  
 procedure main_proc(main_proc_s out sys_refcursor)
 as
 begin
  proc(main_proc_s);
 end;

begin
 main_proc(s);
 
 close s;
end;
/

ORA-01001: invalid cursor
ORA-06512: at line 21


-------------------------------------------------

declare
 s sys_refcursor;
 
 procedure proc(proc_s out sys_refcursor)
 as
 begin
  open proc_s for 'select * from dual';
 end;
 
 procedure main_proc(main_proc_s out sys_refcursor)
 as
 begin
  proc(main_proc_s);
 end;

begin
 proc(s); --<<<< Изменение только здесь!
 
 close s;
end;
/

PL/SQL procedure successfully completed

2 andrey_anonymous
Спасибо, а это что, баг Оракла?
7 мар 07, 10:30    [3873697]     Ответить | Цитировать Сообщить модератору
 Re: Не закрывается sys_refcursor  [new]
Elic
Member

Откуда:
Сообщений: 29990
STFF Возврат refcursor-а посредством NDS через промемежуточную переменную

P.S. Изменение только "не там" :)

_______________________________________________________________________________________

2 andrey_anonymous
Только не "от", а "для" :)
7 мар 07, 10:30    [3873698]     Ответить | Цитировать Сообщить модератору
 Re: Не закрывается sys_refcursor  [new]
Elic
Member

Откуда:
Сообщений: 29990
+ STFF Ошибка при переходе с 9i на 10g
7 мар 07, 10:33    [3873714]     Ответить | Цитировать Сообщить модератору
 Re: Не закрывается sys_refcursor  [new]
serg4321
Member

Откуда: Санкт-Петербург
Сообщений: 133
2 Elic
Спасибо!
7 мар 07, 11:24    [3874106]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить