2016-04-25 16 views
0

複数の行を同時に操作する必要があり、索引付けする必要がある関数を作成しています。 Oracle pl/sqlに関する数時間の読書の後、私はネストされたテーブルの種類のコレクションを作成できると考えました。私は確定的な答えを見つけることができなかったので、試行錯誤の方法が長く続く。 ここに質問の部分があります: 質問:ネストしたテーブルコレクションを作成するベストプラクティスは何ですか? Oracleの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をptに取り込みます。 CLOSE pカーソル; '。 – 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; 
関連する問題