結果を取得しようとすると、関数 pipe_cursor で ORA-01001 Invalid Cursor エラーが発生し、その理由がわかりません。
タイプ T_TBL:
CREATE OR REPLACE TYPE "T_TBL" as table of varchar2(36);
テスト パッケージ:
create or replace package HOA_TEST is
FUNCTION pipe_cursor(
p_cur SYS_REFCURSOR
) RETURN t_tbl PIPELINED;
end HOA_TEST;
/
create or replace package body hoa_test is
function pipe_cursor(p_cur in sys_refcursor) return t_tbl
pipelined is
v_ret rowid;
begin
if p_cur%isopen
then
loop
fetch p_cur
into v_ret;
exit when p_cur%notfound;
pipe row(v_ret);
end loop;
close p_cur;
end if;
end;
end hoa_test;
/
テスト スクリプト:
declare
v_cur_newfilter SYS_REFCURSOR;
begin
open v_cur_newfilter for select 1 from dual;
open :cur for select column_value from table(HOA_TEST.pipe_cursor(v_cur_newfilter));
end;
ノート:
関数を次のように呼び出すと
open :cur for select column_value from table(HOA_TEST.pipe_cursor(CURSOR(Select 1 from dual)));
できます
Oracle Database 11g Release 11.2.0.3.0 - 64bit でこれを実行しようとしています