Dans cet article, je donne un exemple pour effectuer une insertion dans l'utilisation d'Oracle Bulk Collect et de la commande FORALL. Création d'une fonction PL SQL qui prendra les données de la table EMP à l'aide d'un curseur, puis créera une variable de tableau de type de ce type de ligne de curseur, puis la collectera en masse et l'insérera dans la table BONUS à l'aide de FORALL.
Ci-dessous l'exemple :
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;
Vous pouvez l'exécuter comme ci-dessous :
SET SERVEROUTPUT ON; BEGIN IF f_currowtype THEN DBMS_OUTPUT.put_line ('Success'); ELSE DBMS_OUTPUT.put_line ('Failed'); END IF; END;