2009-02-20 37 views

回答

1

你不能完全按照你想要做的那樣做,但是下面的內容可能適合你的需求。基本上兩個遊標循環,其中一個從第一個遊標獲取數據。

declare 

cursor my_cur_1 is 
select foo from bar; 

cursor my_cur_2 (my_foo bar.foo%TYPE) is 
select foo2 from bar2 where bar2.foo = my_foo; 

begin 

for t in my_cur_1 LOOP 

    for s in my_cur_2(t.foo) LOOP 
    -- do some stuff here with data from both. 
    end loop; 
end loop; 

end; 
+0

感謝您的答覆,尼克!問題是我需要從我的例程中返回一個引用遊標。我有一組返回類似結果的過程,並且希望創建一個實用程序,在適用的情況下爲每個結果添加一個額外的WHERE條件。 – JoshL 2009-02-20 05:22:20

0

我不確定你爲什麼想要。我認爲你要找的東西更多的是bulk collect。這將允許您將結果提取到一個集合或表中,然後可以從第二個查詢中進行選擇。更好的是,將其重構爲一個更優雅的查詢。

0

看起來你只是想動態地構建一個ref_cursor。

你可以做到這一點是這樣的:

FUNCTION test_dyn_ref RETURN sys_refcursor IS 
    l_cur2 sys_refcursor; 
    l_query varchar2(4000); 
begin 
    l_query := 'select 1 from dual '; 
    l_query := l_query||' where 1 = 2 '; 
    -- 
    open l_cur2 for l_query; 
    return l_cur2; 
end; 
+0

謝謝,埃德溫!這看起來像一個好的開始。但是,我想將一個類似的WHERE條件應用於一系列不同的查詢。目前,我在每個查詢的末尾附加了這個條件,但是想封裝它。理想情況下,該函數將接受一個參考光標並對其進行修改。 – JoshL 2009-02-21 00:12:42

相關問題