表に大量のデータを挿入する方法

通常のIUNSERT文でLARGE_TBL表へレコードを格納

実行コマンドBEGIN
FOR i IN 1 .. 100000 LOOP
INSERT INTO LARGE_TBL VALUES (i, ‘foobar’);
END LOOP
COMMIT;
END;

大量のレコードのINSERTを高速化する方法

1レコードづつINSERT文を発行する場合、1レコード=1クエリとなり、
大量のレコードを作成しようとするとレコードと同じ数のクエリを発行
する必要があり、 ひじょうに負荷が上がることが想定されます。

そこであらかじめ配列変数に複数レコードの値をセットしておき、それを1回の
クエリでINSERTすることを可能にするのがバルクINSERTと呼ばれる機能がある。

実行コマンドCREATE TABLE LAGRGE_TABLE (ID NUMBER, VALUE VARCHAR2(50));
実行コマンドDECLARE
TYPE tbl_ins IS TABLE OF LARGE_TBL%ROWTYPE INDEX BY BINARY_INTEGER;
w_ins tbl_ins;
実行コマンド
BEGIN
FOR i IN 1 .. 100000 LOOPw_ins(i).ID :=i;
w_ins(i).VALUE :=’foobar’;

END LOOP;

FORALL i in 1 .. 100000 INSERT INTO LARGE_TBL VALUES w_ins(i);
COMMIT;
END;

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です