1

このようなことをする方法はありますか?最初にテーブルに詰め込むことなく、カーソルのフェッチされたデータを refcursor に出力しますか?

create or replace procedure someprocedure
(
rc1 in out adv_refcur_pkg.rc)  -- this is defined below
as

v_class_year varchar(10);

cursor c1
is
select distinct e.pref_class_year
from entity e
where e.pref_class_year between i_start_class and i_end_class;

begin
open c1;
loop
fetch c1 into v_class_year;
EXIT WHEN c1%NOTFOUND;

end loop;
close c1;

open rc1 for select v_class_year from dual;
end;

ここにrefcursorの宣言があります

CREATE OR REPLACE PACKAGE ADVANCE.adv_refcur_pkg
AS
TYPE RC IS REF CURSOR;
END adv_refcur_pkg;
4

2 に答える 2

1

この例によれば、はい、可能です:

https://forums.oracle.com/thread/696634

于 2013-10-17T13:31:56.133 に答える
0

カーソル自体を簡単に渡すことができるのに、わざわざそんなことをする必要があるでしょうか。

create or replace procedure someprocedure
(
rc1 in out adv_refcur_pkg.rc)  -- this is defined below
as
begin
open rc1 for
   select distinct e.pref_class_year
     from entity e
    where e.pref_class_year between i_start_class and i_end_class;
end;

「someprocedure」を呼び出すと、開いているカーソルがあり、そこからフェッチできます。

BEGIN
...
  someprocedure(TheCursor);
  LOOP
    fetch TheCursor into v_class_year;
    exit when TheCursor%NOTFOUND;
    ...
  END LOOP;
  CLOSE TheCursor;
...
END;
于 2013-10-17T13:51:08.320 に答える