我有三個sql塊在下面。第一和第二塊工作正常。但第三隻返回一行。在我的真實世界的例子中,我有13個refcursors,每個查詢有幾列。我想避免編寫數百dbms_out.put_line(cur.column_name)的聲明如何在沒有dbms_output.put_line的情況下輸出pl/sql動態選擇中的所有行
--#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
Kubanczyk,我得到refcursor只能選擇,我只是想避免寫幾個put_line語句。注意我的真實世界的例子並不像我的stackoverflow例子那麼簡單。基本概念就像sql塊#3。運行頂部(主)選擇來獲取ID列表。然後使用頂部(主)選擇提供的id運行13條select語句,循環直到所有id都通過13個內部選擇運行 – user584583
我還應該說我明白循環遍歷並不是最有效的方法以獲取數據,但古代應用程序的構建是以這種方式使用數據,並且沒有預算來修復應用程序的這一部分。 – user584583