バルク処理もやってみた。
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;
/

