前回のブログ投稿では、カーソル行タイプ型オブジェクトを使用したOracleBulkCollectの使用例を示しました。これは、最初にカーソルを作成し、次にカーソルタイプのオブジェクトを入力してからカーソルを開き、一括収集にフェッチして、最後にForallを使用してそれらを処理します。ただし、一時的な匿名PLSQLブロックを使用して1回だけデータを準備する必要があり、そのタスクを実行するためにあまり多くのコードを記述したくない場合があります。この種のシナリオでは、一括収集の選択を使用できます。 コードを書くのに多くの時間を無駄にすることなく、タスクをすばやく実行するオプション。
以下は、EMP表からレコードを取得してBONUS表を更新し、画面に出力するPLSQLブロックの例です。
SET SEVEROUTPUT ON; DECLARE TYPE t_emp IS TABLE OF emp%ROWTYPE; e_rec t_emp; BEGIN SELECT * BULK COLLECT INTO e_rec FROM emp; FORALL i IN e_rec.FIRST .. e_rec.LAST update bonus set amount = e_rec(i).sal * 15 / 100 where empno = e_rec(i).empno; Commit; FOR i IN e_rec.FIRST .. e_rec.LAST LOOP DBMS_OUTPUT. put_line ( 'Bonus Updated For Employee: ' || e_rec (i).ename || ' ' || 'Bonus: ' || e_rec(i).sal * 15 / 100); END LOOP; END;