sql >> データベース >  >> RDS >> Oracle

PL/SQLで参照カーソルから一時テーブルにデータを一括挿入する方法

    REF CURSORでBULK操作を使用できます:

    SQL> CREATE GLOBAL TEMPORARY TABLE gt (ID NUMBER);
    
    Table crÚÚe.
    
    SQL> DECLARE
      2     l_refcursor SYS_REFCURSOR;
      3     TYPE tab_number IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
      4     l_data tab_number;
      5  BEGIN
      6     OPEN l_refcursor FOR
      7        SELECT ROWNUM FROM dual CONNECT BY LEVEL <= 1e6;
      8     LOOP
      9        FETCH l_refcursor BULK COLLECT
     10           INTO l_data LIMIT 100;
     11
     12        FORALL i IN 1..l_data.count
     13           INSERT INTO gt VALUES (l_data(i));
     14
     15        EXIT WHEN l_refcursor%NOTFOUND;
     16
     17     END LOOP;
     18     CLOSE l_refcursor;
     19  END;
     20  /
    
    ProcÚdure PL/SQL terminÚe avec succÞs.
    

    ただし、Oracle 10gは、通常のループに対してこの最適化をすでに実装しているため、単純なLOOP...INSERTではあまり改善されない場合があります。



    1. MySQLストアド関数の作成に関するエラーエラー1064および1327

    2. MySQLの距離計算(簡単な解決策)

    3. 2番目のデータベースからデータをプルする効率的な方法は?

    4. Python MySQLのパラメーター化されたクエリがLIKEステートメントの%ワイルドカードと競合します