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

Collecte en bloc Oracle PL/SQL avec exemple d'exceptions de sauvegarde

Dans mes articles précédents, j'ai donné des exemples d'opérations Bulk Collect dans Oracle. Voici un exemple de collecte en masse avec des exceptions d'enregistrement pour gérer les erreurs lors du traitement de la collecte en masse.

Exemple de collecte groupée PL/SQL avec exceptions d'enregistrement

Dans le programme PL/SQL suivant, il mettra à jour la colonne LAST_NAME de la table EMPLOYEES du schéma HR, et en deux tentatives, il tentera de mettre à jour avec une valeur NULL, ce qui n'est pas autorisé pour la colonne LAST_NAME car une contrainte non nulle est appliquée. Donc, dans ce cas, cela déclenchera l'erreur et s'imprimera à l'écran, mais la tâche continuera à se mettre à jour pour d'autres enregistrements car ici nous utilisons Enregistrer les exceptions clause avec Bulk Collect .

SET SERVEROUTPUT ON

--Start the PL/SQL block--

DECLARE
   --A local PL/SQL table holds the list of new names--
   TYPE T_EMP IS TABLE OF VARCHAR2 (100);

   L_EMP T_EMP
         := T_EMP ('Smith',
                   'Adams',
                   NULL,
                   'King',
                   NULL,
                   'George');
   BULK_ERRORS EXCEPTION;
   PRAGMA EXCEPTION_INIT (BULK_ERRORS, -24381);
BEGIN
   --FORALL to update the employee names--
   FORALL I IN 1 .. L_EMP.COUNT
   SAVE EXCEPTIONS
      UPDATE EMPLOYEES
         SET last_NAME = L_EMP (I);
EXCEPTION
   --BULK_ERRORS exception handler--
   WHEN BULK_ERRORS
   THEN
      --Display the errors occurred during BULK DML transaction--
      FOR J IN 1 .. SQL%BULK_EXCEPTIONS.COUNT
      LOOP
         DBMS_OUTPUT.PUT_LINE (CHR (10));
         DBMS_OUTPUT.PUT_LINE (
            'Error in UPDATE: ' || SQL%BULK_EXCEPTIONS (J).ERROR_INDEX);
         DBMS_OUTPUT.PUT_LINE (
            'Error Code is: ' || SQL%BULK_EXCEPTIONS (J).ERROR_CODE);
         DBMS_OUTPUT.PUT_LINE('Error Message is: '
                              || SQLERRM('-'
                                         || SQL%BULK_EXCEPTIONS (J).ERROR_CODE));
      END LOOP;
END;
/

COMMIT
/

Sortie

Error in UPDATE: 3
Error Code is: 1407
Error Message is: ORA-01407: cannot update () to NULL
Error in UPDATE: 5
Error Code is: 1407
Error Message is: ORA-01407: cannot update () to NULL
PL/SQL procedure successfully completed.
Commit complete.

Voir aussi :

    • Comment compresser un fichier en PL/SQL ?
    • Comment décompresser un fichier en PL/SQL ?
    • Sélectionner la collecte en bloc dans l'exemple Oracle