私はOracle 12cを使用しています。 PL/SQLでは、私は、これまでのところは良いがPL SQL For Loop Sys_RefCursor
set serveroutput on
declare
cursor c1 is
select 1 as y from dual;
begin
for x in c1 loop
dbms_output.put_line(x.y);
end loop;
end;
私もこれを行うことができ、この
set serveroutput on
declare
begin
for x in (select 1 as y from dual) loop
dbms_output.put_line(x.y);
end loop;
end;
を...行うことができます。しかし、私はsys_refcursorでこれを行うことはできますか?私は...私はフェッチ/ whileループでそれを行うことができます承知していますが、私がやりたい
set serveroutput on
declare
cur sys_refcursor;
begin
cur := Package.GetData(1234);
fetch cur into y;
while cur%FOUND loop
dbms_output.put_line(y);
fetch cur into y;
end loop;
end;
...(私はそれが多くのクリーナーだと思う)ループ構文について好む
set serveroutput on
declare
cur sys_refcursor;
begin
cur := PACKAGE.GetData(1234); -- This returns a sys_refcursor
for x in cur loop
dbms_output.put_line(x.y);
end loop;
end;
Error report -
ORA-06550: line 5, column 16:
PLS-00221: 'cur' is not a procedure or is undefined
sys_refcursorをループするメカニズムはありますか(フェッチ・イン/ whileループではなく)。おそらく、私が知りません12cの新しい幻想的な何か...?
私はそうは思いません。 fetch/whileループで何が問題になっていますか? –
絶対に参照カーソルを使用する必要がありますか? IMEでは、PL/SQL内で作業するときにREFカーソルを必要とすることは稀です。主にPL/SQL以外のプログラムにカーソル・ポインタを渡して、カーソルを開いたかのようにループできます。 – Boneist
弱い型の参照カーソル([%rowtype以降は動作しません])(http://stackoverflow.com/q/11187376/266304)に基づいてレコードを宣言できないという問題は、レコード型を宣言したくない、またはそれが何を含むのか分からないのですか? 'x.y'リファレンスは少なくともいくつかのフィールドを知っていることを示唆していますか? –