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_employee_arr IS TABLE OF employee%ROWTYPE INDEX BY BINARY_INTEGER;
employee_arr type_employee_arr;
BEGIN
SELECT * BULK COLLECT INTO employee_arr FROM employee;
IF employee_arr.COUNT > 0 THEN
FOR i IN employee_arr.FIRST..employee_arr.LAST LOOP
UPDATE employee
SET name2 = employee_arr(i).name,
romaji2 = employee_arr(i).romaji
WHERE id = employee_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 employee
WHERE romaji like '%a%';
TYPE type_employee_arr IS TABLE OF employee%ROWTYPE INDEX BY BINARY_INTEGER;
employee_arr type_employee_arr;
BEGIN
OPEN cur1;
FETCH cur1 BULK COLLECT INTO employee_arr LIMIT 1000;
CLOSE cur1;
FOR i IN employee_arr.FIRST..employee_arr.LAST LOOP
UPDATE employee
SET name2 = employee_arr(i).name,
romaji2 = employee_arr(i).romaji
WHERE id = employee_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文のループで処理を更新します。
関連の記事