Oracle PL/SQLのBULK COLLECTのサンプル

Oracle PL/SQLのBULK COLLECTのサンプルです。

目次

サンプル BULK COLLECT
  BULK COLLECTでSelectで取得した項目を変数にセットする
  BULK COLLECTでカーソルから変数にセットする

BULK COLLECT

 

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文のループで処理を更新します。

関連の記事

Oracle PL/SQLのWhere Current Ofのサンプル

△上に戻る