Articles

Exceptions prédéfinies Oracle

Les exceptions (ou erreurs d’exécution) PL/SQL peuvent provenir de défauts de conception, d’erreurs de développement, de défaillances matérielles ou encore de nombreuses autres sources. Bien qu’il ne soit pas possible d’anticiper chacune des exceptions possibles, il est possible d’écrire des gestionnaires d’exceptions (exception handlers) qui permettent à votre programme de continuer à fonctionner.

La gestion des exceptions se fait dans la section EXCEPTION du bloc PL/SQL. Plusieurs gestionnaires d’exceptions peuvent être mis en place.

BEGIN
  ...
EXCEPTION
  WHEN exception_1 THEN
    statements_1
  WHEN exception_2 OR exception_3 THEN
    statements_2
  WHEN OTHERS THEN
    statements_3
END;

Lorsqu’une exception est levée dans la section exécutable du bloc, l’exécution s’arrête et la section EXCEPTION prend le relai. Si la section EXCEPTION n’est pas définie, l’erreur levée est propagée à l’appelant : soit le bloc parent, soit l’environnement (SQL*Plus par exemple) si le bloc n’a pas de parent.

Les exceptions sont classées en trois catégories :

  • Internally defined : déclarée et levée implicitement, elle possède un numéro mais pas forcément de nom ;
  • Predefined : les exceptions les plus courantes se voient attribuer un nom (déclaré dans le package STANDARD) par PL/SQL afin de simplifier leur gestion ;
  • User-defined : définies par l’utilisateur pour les besoins spécifiques de son application, elles doivent être levées manuellement.

Il existe une vingtaine d’exceptions prédéfinies dont voici la liste :

Exception prédéfinie Erreur Oracle SQLCODE
ACCESS_INTO_NULL ORA-06530 -6530
CASE_NOT_FOUND ORA-06592 -6592
COLLECTION_IS_NULL ORA-06531 -6531
CURSOR_ALREADY_OPEN ORA-06511 -6511
DUP_VAL_ON_INDEX ORA-00001 -1
INVALID_CURSOR ORA-01001 -1001
INVALID_NUMBER ORA-01722 -1722
LOGIN_DENIED ORA-01017 -1017
NO_DATA_FOUND ORA-01403 +100
NO_DATA_NEEDED ORA-06548 -6548
NOT_LOGGED_ON ORA-01012 -1012
PROGRAM_ERROR ORA-06501 -6501
ROWTYPE_MISMATCH ORA-06504 -6504
SELF_IS_NULL ORA-30625 -30625
STORAGE_ERROR ORA-06500 -6500
SUBSCRIPT_BEYOND_COUNT ORA-06533 -6533
SUBSCRIPT_OUTSIDE_LIMIT ORA-06532 -6532
SYS_INVALID_ROWID ORA-01410 -1410
TIMEOUT_ON_RESOURCE ORA-00051 -51
TOO_MANY_ROWS ORA-01422 -1422
VALUE_ERROR ORA-06502 -6502
ZERO_DIVIDE ORA-01476 -1476

Vous pouvez retrouver l’ensemble des erreurs internes d’Oracle dans la documentation de l’éditeur.