Помогите пофетчить ref cursor

ivansa
Дата: 27.02.2007 14:15:57
при передаче refcursor-а функции он оказывается закрытым, и открываться отказывается:
select test1.a(test1.b) from dual
*
ERROR at line 1:
ORA-01001: invalid cursor

если добавить в a 'open p_cur' - ругается in cursor cannot be opened.
помогите, пожалуйста!
  function b return sys_refcursor
  is
    v_cur sys_refcursor;
  begin
    open v_cur for select id from client_phone;
    return v_cur;
  end;
  
  function a ( p_cur sys_refcursor ) return number
  is
    v_cnt number;
  begin
    loop
    exit when p_cur%notfound;
      fetch p_cur into v_cnt;
    end loop;
    return v_cnt;
  end;
-k2-
Дата: 27.02.2007 14:22:34
declare
c number;
function b return sys_refcursor
is
v_cur sys_refcursor;
begin
open v_cur for select 1 id from dual;
return v_cur;
end;
function a ( p_cur sys_refcursor ) return number
is
v_cnt number;
begin
loop
exit when p_cur%notfound;
fetch p_cur into v_cnt;
end loop;
return v_cnt;
end;
begin
c := a(b);
dbms_output.put_line(c);
end;
tru55
Дата: 27.02.2007 14:27:13
1. Сначала FETCH, а потом проверяй NOTFOUND
2. зачем функция вызывается в SELECT
ivansa
Дата: 27.02.2007 14:53:20
спасибо! без селекта все работает!
Stax.
Дата: 27.02.2007 15:35:15
ivansa
спасибо! без селекта все работает!

имхо
для селекта надо делать обертку
create or replace  function c  return number
is
begin
 return a(b);
end;

SQL не понима sys_refcursor
ps
мона еще так select a(cursor(select ....
но это наверное из другой оперы

......
stax