08/12/2021
PL – SQL -LMD
EXCEPTION
EXCEPTIONS
Exceptions Exceptions Exceptions
Systèmes Utilisateurs Systèmes
Nommées Nommées Anonymes
Exceptions
Utilisateurs
Anonymes
(-20000 et -20999)
1
08/12/2021
EXCEPTIONS
Syntaxe
Declare
...
Begin
…
Exception
WHEN <nom_exception> [OR <nom_exception>…]
THEN <instruction_plsql>;
…
[WHEN OTHERS THEN <instructions_plsql>;]
End;
LES EXCEPTIONS PRÉDÉFINIES
Se trouve dans le package STANDARD de PL/SQL
Quelques exceptions prédéfinies :
• No_Data_Found (ORA-01403 SQLCODE =+100)
• CURSOR_ALREADY_OPEN (ORA-6511 SQLCODE =-6511)
• ZERO_DIVIDE (ORA-01476 SQLCODE = -1476)
• CASE_NOT_FOUND (ORA-6592 SQLCODE =-6592)
2
08/12/2021
EXCEPTION NO DATA FOUND
Dans la table bateau :
Déclarer deux variables du même type que nobateau et
nomodele.
Initialiser la variable nobateau par une valeur inexistante par
exemple 20.
Faites un select qui ramène le bateau qui correspond à cette
valeur.
Gérer l’exception no data found et afficher un message d’erreur .
Continuer le traitement en affichant le nom du bateau no « 1 »
PORTÉE EXCEPTION
« Quitte le bloc dans le lequel il est déclenché et recherche une exception
dans les blocs supérieurs »
Créer un bloc PLSQL
Créer un autre bloc dans ce bloc :
Déclarer deux variables du même type que nobateau et nomodele.
Initialiser la variable nobateau par une valeur inexistante.
Faites un select qui ramène le bateau qui correspond à cette valeur.
Gérer l’exception no data found et afficher un message d’erreur .
Ajouter une instruction dans le BLOC Supérieur qui afficher un message
3
08/12/2021
SQLCODE & SQLERRM
SQLCODE
Permet de retrouver le code des exceptions Oracle
SQLERRM
Permet de retrouver le message des exceptions
Oracle
EXCEPTION NO DATA FOUND
Dans la table bateau :
Déclarer une variable du même type que nomodele.
Faites un select qui ramène toute la colonne nomodele de la
table bateau est stocker le résultat dans cette variable.
Gérer l’exception no data found et afficher un message d’erreur .
Afficher le nom du message d’erreur et le code SQL.
Récupérer le nom de l’exception et utiliser le .
4
08/12/2021
LISTE DE QLQ EXCEPTION DÉFINIES
ORA-00001 DUP_VAL_ON_INDEX Une valeur en double existe
ORA-01001 INVALID_CURSOR Le curseur n'est pas valide
ORA-010121 NOT_LOGGED_ON L'utilisateur n'est pas connecté
ORA-01017 LOGIN_DENIED Une erreur système s'est produite
ORA-01017 LOGIN_DENIED Une erreur système s'est produite
ORA-01017 LOGIN_DENIED Une erreur système s'est produite
ORA-01403 NO_DATA_FOUND La requête ne renvoie aucune donnée
Une requête sur une seule ligne renvoie
ORA-01422 TOO_MANY_ROWS
plusieurs lignes
Une tentative a été faite pour diviser un
ORA-01476 ZERO_DIVIDE
nombre par zéro
ORA-01722 INVALID_NUMBER Le numéro est invalide
Une incompatibilité s'est produite dans le
ORA-06504 ROWTYPE_MISMATCH
type de ligne
ORA-06511 CURSOR_ALREADY_OPEN Le curseur est déjà ouvert
ORA-06532 COLLECTION_IS_NULL Travailler avec la collection NULL
ORA-06531 SUBSCRIPT_OUTSIDE_LIMIT Index de collection hors de portée
>ORA-06533 SUBSCRIPT_BEYOND_COUNT Index de collection hors de compte
EXCEPTIONS ANONYMES
1. A partir d’un code saisi afficher le message
correspondant : Fonction SQLEERM(&sqlcode).
2. Lancer une boucle qui affiche l’ensemble des messages
d’erreur des code SQL entre -2000 et 0:
5
08/12/2021
PRAGMA EXCEPTION_INIT
Fonction:
Permet d’associer une exception utilisateur à un code d’erreur Oracle.
Syntaxe:
Declare
<nom_exception> Exception;
Pragma Excpetion_init (<nom_excpetion>,<code_erreur_oracle>);
Begin
Exception
WHEN <nom_exception> THEN
<istruction_plsql>;
End;
PRAGMA EXCEPTION_INIT
Essayer de supprimer le bateau numéro : 1 (rattacher à plusieurs
voyages par la clé étrangère).
Créer une exception : Suppression_FK liée au code erreur -2292.
Levez l’exception nommée.
Message « Vous ne pouvez pas supprimer une ligne référencé dans
une autre table- Violation de clé étrangère».
6
08/12/2021
EXCEPTION UTILISATEUR
Declare
<nom_exception> Exception;
Begin
RAISE <nom_exception>
Exception
WHEN <nom_exception> THEN
<istruction_plsql>;
End;
EXCEPTION UTILISATEUR
Définir une exception date_achat_invalide.
Récupérer la date d’achat du bateau 2.
Avec un « IF » remonter l’exception si la nouvelle date « 10/10/2010 » est
postérieure à la date d’achat du bateau 2.
Mettez à jour la date d’achat du bateau avec la nouvelle .
Intercepter l’exception date_achat_invalide.
Ajouter un message d’affichage.
Vérifier que la date ne sera pas changée.
7
08/12/2021
MERCI DE
VOTRE
ATTENTION