2016-08-16 62 views
0

每次循環迭代多個記錄,我試圖寫的Oracle PL/SQL程序,看起來像下面的代碼片段:追加在PL/SQL

> LOOP: 
     >READ INPUT FROM CURSOR 
     >GET OUTPUTS USING SELECT QUERY(OUTPUT RECORD COUNT MAY VARY ON EACH ITERATION) 
     >APPEND OUTPUT TO SOME DATA STRUCTURE 
    > END LOOP; 
    >RETURN DATA STRUCTURE 

其實我堅持這個追加任務。在每次迭代中,使用選擇查詢可以獲得不同數量的輸出。我想在單個數據結構中追加所有記錄。

假設內部選擇查詢返回3列ColA,ColB,ColC和循環迭代2次。然後,在第一次迭代返回:

1,2,3
3,4,5

在返回4,5,7下一次迭代。

的過程將返回包含以下一些數據結構:

1,2,3
3,4,5
4,5,7

有什麼辦法?

+0

什麼是返回的數據類型?數組,連接的varchar等? – Hawk

+0

我被允許返回包含所需數據集的任何內容。任何複合數據類型都會這樣。 – fuzzy

回答

1

我想這可以用pipelined functions來解決。 因此,這將是這個樣子:

聲明類型

TYPE my_record is RECORD(
     cola  number, 
     colb  number, 
     colc  number); 

TYPE my_table IS TABLE OF my_record; 

功能

function get_results() RETURN my_table PIPELINED is 
    my_rec my_record:=null; 
    cursor myCursor(data number) is 
    --some select expression 
    ; 

    begin 

    --loop through outputs 

    FOR item IN myCursor(data) LOOP 
     my_rec:=null; 
     select item.value1,item.value2,item.value2 into rec from dual; 
     PIPE ROW(my_rec); 
    end loop; 
    return; 

    end; 

終於用它

SELECT * FROM TABLE(get_results);