Oracle
 sql >> Base de données >  >> RDS >> Oracle

Exemple de collecte en bloc Oracle utilisant l'objet de type de type de ligne Cursor

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;