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

関連の記事

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

△上に戻る