1

以下に3つのSQLブロックがあります。最初と 2 番目のブロックは正常に動作します。しかし、3 番目は 1 行しか返しません。私の実際の例では、13 個の refcursor があり、各クエリにはいくつかの列があります。何百もの dbms_out.put_line(cur.column_name) ステートメントを書くのを避けたい

--#1 correctly returns 8 rows.
VAR rc REFCURSOR
BEGIN
OPEN :rc FOR SELECT object_id,object_name from user_objects where rownum < 9;
END;
print rc
--------------------------------------------------------------

--#2 correctly returns 8 rows
set serveroutput on
BEGIN
for cur in (select object_id,object_name from user_objects where rownum < 9)
loop
    dbms_output.put_line(cur.object_id);
    dbms_output.put_line(cur.object_name);
end loop;
END;
---------------------------------------------------------------

--#3 FAIL, only returns 1 row
set serveroutput on
VAR rc REFCURSOR
BEGIN
for cur in (select object_id,object_name from user_objects where rownum < 9)
loop
OPEN :rc FOR SELECT object_id,object_name from user_objects where object_id = cur.object_id;
end loop;
END;
print rc
4

2 に答える 2