1

結果を取得しようとすると、関数 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 でこれを実行しようとしています

4

0 に答える 0