【PL/SQL】バルク処理

バルク処理もやってみた。

SELECT

DECLARE -- コレクション型を定義 TYPE tra1_type IS TABLE OF TRANSACTION1%rowtype; -- コレクション型の変数を定義 tra1 tra1_type;
BEGIN SELECT * BULK COLLECT INTO tra1 FROM TRANSACTION1;
END;
/
DECLARE -- コレクション型を定義 TYPE tra1_type IS TABLE OF TRANSACTION1%rowtype; -- コレクション型の変数を定義 tra1 tra1_type; -- カーソル定義 CURSOR tra1_rows IS SELECT * FROM TRANSACTION1;
BEGIN OPEN tra1_rows; -- フェッチする FETCH tra1_rows BULK COLLECT INTO tra1; FOR i IN 1 .. tra1.COUNT LOOP DBMS_OUTPUT.PUT_LINE(tra1(i).NAME); END loop; CLOSE tra1_rows;
END;
/

2通り書きましたが、結果は同じ↓

PL/SQLプロシージャが正常に完了しました。
AAA
BBB
CCC
DDD
EEE
FFF
GGG
HHH

INSERT

DECLARE -- コレクション型を定義 TYPE tra1_type IS TABLE OF TRANSACTION1%rowtype; -- コレクション型の変数を定義 tra1 tra1_type;
BEGIN SELECT * BULK COLLECT INTO tra1 FROM TRANSACTION1; -- TRANSACTION2 に新規登録 FORALL i IN 1 .. tra1.COUNT INSERT INTO TRANSACTION2 VALUES( tra1(i).ID, tra1(i).NAME ); -- TRANSACTION1 と TRANSACTION2 が同じ項目なら以下でも良い -- INSERT INTO TRANSACTION2 VALUES tra1;
END;
/

UPDATE

DECLARE -- コレクション型を定義 TYPE tra1_id_tyep IS TABLE OF TRANSACTION1.ID%TYPE; -- コレクション型の変数を定義 tra1_id tra1_id_tyep;
BEGIN -- 取得 SELECT ID BULK COLLECT INTO tra1_id FROM TRANSACTION1; -- 全件ループして1.5倍 FORALL i IN 1 .. tra1_id.COUNT UPDATE TRANSACTION1 SET PRICE = PRICE * 1.5 WHERE ID = tra1_id(i);
END;
/

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください