Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle-Massenerfassungsbeispiel unter Verwendung des Cursor-Rowtype-Typobjekts

In diesem Beitrag gebe ich ein Beispiel, um eine Einfügung in die Verwendung von Oracle Bulk Collect und dem FORALL-Befehl durchzuführen. Erstellt eine PL-SQL-Funktion, die Daten aus der EMP-Tabelle mit einem Cursor übernimmt, dann eine Typ-Array-Variable dieses Cursor-Zeilentyps erstellt und sie dann mit FORALL massenhaft erfasst und in die BONUS-Tabelle einfügt.

Unten ist das Beispiel:

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;

Sie können es wie folgt ausführen:

SET SERVEROUTPUT ON;

BEGIN
IF f_currowtype
THEN
DBMS_OUTPUT.put_line ('Success');
ELSE
DBMS_OUTPUT.put_line ('Failed');
END IF;
END;