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

Sélectionnez la collecte en bloc dans l'exemple Oracle

Dans le billet de blog précédent, j'ai donné un exemple d'utilisation d'Oracle Bulk Collect à l'aide d'un objet de type Cursor Rowtype. Ce qui crée d'abord le curseur, puis tape l'objet de type curseur, puis ouvre le curseur, le récupère en masse, puis le traite finalement à l'aide de Forall. Mais parfois, vous devrez peut-être préparer certaines données une seule fois avec un bloc PLSQL anonyme temporaire, et vous ne voulez pas écrire trop de code pour effectuer cette tâche. Pour ce type de scénarios, vous pouvez utiliser Select Bulk Collect into une option pour effectuer n'importe quelle tâche rapidement sans perdre trop de temps à écrire du code.

Vous trouverez ci-dessous l'exemple du bloc PLSQL qui prendra les enregistrements de la table EMP et mettra à jour la table BONUS et s'imprimera également à l'écran.

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;