Oracle PL/SQLのBULK COLLECTのサンプルです。
目次
サンプル | BULK COLLECT |
BULK COLLECTでSelectで取得した項目を変数にセットする | |
BULK COLLECTでカーソルから変数にセットする |
BULK COLLECT
- 複数の行を取得し変数にセットします。高速化します。
- bulc collectは、一括収集という意味です。
- 以下は、OracleのBULK COLLECTとFORALLによるバルク処理のリンクです。
https://www.oracle.com/jp/database/technologies/plsql101/o52plsql.html
BULK COLLECTでSelectで取得した項目を変数にセットする
SELECT テーブル項目 BULK COLLECT INTO 変数 |
BULK COLLECTでSelectで取得した項目を変数にセットするサンプルです。
create or replace procedure TEST1
IS
TYPE type_syain_arr IS TABLE OF syain%ROWTYPE INDEX BY BINARY_INTEGER;
syain_arr type_syain_arr;
BEGIN
SELECT * BULK COLLECT INTO syain_arr FROM syain;
IF syain_arr.COUNT > 0 THEN
FOR i IN syain_arr.FIRST..syain_arr.LAST LOOP
UPDATE syain
SET name_copy = syain_arr(i).name,
romaji_copy = syain_arr(i).romaji
WHERE id = syain_arr(i).id;
END LOOP;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('SQLCODE = ' || SQLCODE);
dbms_output.put_line('SQLERRM = ' || SQLERRM);
ROLLBACK;
END;
4行目は、変数です。
6行目は、BULK COLLECTでSelectで取得した項目を変数にセットしています。
9行目は、FOR文のループで処理を更新します。
BULK COLLECTでカーソルから変数にセットする
FETCH カーソル BULK COLLECT INTO 変数 [LIMIT 件数] |
BULK COLLECTでカーソルから変数にセットするサンプルです。
create or replace procedure TEST1
IS
CURSOR cur1 IS
SELECT * FROM SYAIN
WHERE romaji like '%a%';
TYPE type_syain_arr IS TABLE OF syain%ROWTYPE INDEX BY BINARY_INTEGER;
syain_arr type_syain_arr;
BEGIN
OPEN cur1;
FETCH cur1 BULK COLLECT INTO syain_arr LIMIT 1000;
CLOSE cur1;
FOR i IN syain_arr.FIRST..syain_arr.LAST LOOP
UPDATE syain
SET name_copy = syain_arr(i).name,
romaji_copy = syain_arr(i).romaji
WHERE id = syain_arr(i).id;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('SQLCODE = ' || SQLCODE);
dbms_output.put_line('SQLERRM = ' || SQLERRM);
ROLLBACK;
END;
3~5行目は、select文のカーソルです。
7行目は、変数です。
10行目は、BULK COLLECTでカーソルから変数にセットしています。
LIMIT 1000は行数制限です。省略可能です。
13行目は、FOR文のループで処理を更新します。
関連の記事