Oracle
 sql >> Database >  >> RDS >> Oracle

Seleziona Raccolta in blocco nell'esempio Oracle

Nel precedente post del blog, ho fornito un esempio per utilizzare Oracle Bulk Collect utilizzando l'oggetto tipo di riga del cursore. Che prima crea il cursore, quindi digita l'oggetto del tipo di cursore e quindi apre il cursore, recuperandoli in blocco e infine elaborandoli utilizzando Forall. Ma a volte potrebbe essere necessario preparare alcuni dati solo per una volta con un blocco PLSQL anonimo temporaneo e non si desidera scrivere troppo codice per eseguire tale attività. Per questo tipo di scenari, puoi utilizzare Seleziona raccolta in blocco in un'opzione per eseguire rapidamente qualsiasi attività senza perdere troppo tempo a scrivere codice.

Di seguito è riportato l'esempio del blocco PLSQL che prenderà i record dalla tabella EMP e aggiornerà la tabella BONUS e stamperà anche sullo schermo.

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;