この投稿では、OracleBulkCollectおよびFORALLコマンドを使用して挿入を実行する例を示しています。カーソルを使用してEMP表からデータを取得するPLSQL関数を作成し、そのカーソル行タイプの型配列変数を作成してから、FORALLを使用して一括収集してBONUS表に挿入します。
以下に例を示します。
CREATE OR REPLACE FUNCTION f_currowtype
RETURN BOOLEAN
IS
CURSOR c_emp
IS
SELECT empno,
ename,
job,
sal
FROM emp;
TYPE t_emp IS TABLE OF c_emp%ROWTYPE;
e_rec t_emp;
BEGIN
OPEN c_emp;
FETCH c_emp
BULK COLLECT INTO e_rec;
CLOSE c_emp;
FORALL i IN e_rec.FIRST .. e_rec.LAST
insert into bonus (empno, amount)
values (e_rec(i).empno, e_rec(i).sal * 10 / 100);
DBMS_OUTPUT.put_line ('Rows inserted: ' || SQL%ROWCOUNT);
COMMIT;
RETURN TRUE;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
RETURN FALSE;
END; 以下のように実行できます:
SET SERVEROUTPUT ON;
BEGIN
IF f_currowtype
THEN
DBMS_OUTPUT.put_line ('Success');
ELSE
DBMS_OUTPUT.put_line ('Failed');
END IF;
END;