2016-04-25 58 views
0

我正在寫一個函數,需要同時處理多個行,並且他們需要進行索引。經過幾個小時的閱讀關於Oracle pl/sql,我想我可以創建一個嵌套表類型的集合。由於我找不到明確的答案,並且試驗/錯誤方法需要長時間。 這是問題部分: 問題:填充嵌套表集合的最佳實踐是什麼?甲骨文的PL/SQL如何使用遊標插入到嵌套表集合plsql

 type partsTable is table of Parts_north_wing%rowtype; 
     pt PartsTable;  
     index number;   
     cursor pCursor is select * from Parts_north_wing; 
begin 
     index := 1; 
     open pCursor; 
     loop 
       fetch pCursor into tempRow; 
       pt(index) := tempRow; 
       index := index + 1; 
       exit when pCursor%notfound; 
     end loop; 
     close pCursor; 
+0

我相信,最有效的方法是在你的光標上使用'BULK COLLECT INTO'子句或者選擇,例如, OPEN pCursor; FETCH pCursor BULK COLLECT INTO pt;關閉pCursor;'。 – AndrewMcCoist

回答

2

遊標for循環幾乎總是要處理在PL/SQL行的最好方式。它比OPEN/FETCH/CLOSE方法更簡單 - 無需聲明變量和操作遊標。它自動批量收集結果也更快。

begin 
    for pt in 
    (
     select parts_north_wing.*, rownum row_index 
     from parts_north_wing 
    ) loop 
     --Do something here 
     null; 
    end loop; 
end; 
/
+0

明白了。所以這是循環語句的隱式遊標。很方便。 http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/cursor_for_loop_statement.htm#LNPLS1155 –

0

試試這個。希望這可以幫助你清除你的一些概念。

--Create a dummy object tyep 
CREATE OR REPLACE TYPE av_obj 
IS 
    OBJECT 
    (
    ADD1 VARCHAR2(100), 
    ADD2 VARCHAR2(100)); 
    --Create a nested tale type 

CREATE OR REPLACE TYPE AV_TT 
IS 
    TABLE OF AV_OBJ; 

    --Bulk collect into nested table type 
    DECLARE 
    av_nested_tab AVROY.AV_TT; 
    BEGIN 
    SELECT avroy.av_obj(LEVEL 
     ||'add1',LEVEL 
     ||'add2') BULK COLLECT 
    INTO av_nested_tab 
    FROM DUAL 
     CONNECT BY LEVEL < 10; 
    END;