Académique Documents
Professionnel Documents
Culture Documents
Les exceptions
Généralités sur le traitement des erreurs
Lorsqu’un programme est en exécution, certaines circonstances
exceptionnelles peuvent compromettre la poursuite normale de son
exécution. Le programme peut s'arrêter d’une façon prématurée et
inattendue si on ne traite pas correctement ces circonstances qui peuvent
être liées à plusieurs types d’erreurs, comme par exemple:
• Erreur matérielle (imprimante débranchée, serveur en panne, câbles
défectueux ….)
• Contrainte physique (disque plein, dépassement de la capacité de la
mémoire, …)
• Erreurs de programmation (cas non prévu par le programme, division
par zéro, ouverture d’un fichier qui n’existe pas, …)
• Utilisateur récalcitrant (type de données rentrées par l’utilisateur
incorrect)
Gérer les exceptions
La gestion des exceptions est un mécanisme qui permet d’avoir un moyen
souple et efficace pour la gestion des erreurs dans les programmes. Les
exceptions permettent d'écrire le flux principal du code et de traiter les cas
exceptionnels ailleurs. Cette approche possède plusieurs avantages :
• Dissocier la détection d'une erreur de son traitement.
• Séparer la gestion des erreurs du reste du code, donc contribuer à la
lisibilité des programmes.
• Séparation du code de gestion des erreurs du code de logique métier.
• Meilleure lisibilité des programmes.
Intercepter les exceptions
Le traitement ou l’interception des exceptions se fait dans la partie
EXCEPTION du bloc Pl/Sql à l’aide des mots clés WHEN et THEN:
Syntaxe:
Pour pouvoir intercepter les autres types d’exceptions qui ne sont pas
prises en charge par la/les exceptions déclarées, on fait appel aux mots clés
EXCEPTION
WHEN
WHEN OTHERS et THENTHEN <liste_instructions> ;
<nom_exception>
Syntaxe:
EXCEPTION
WHEN OTHERS THEN <liste_instructions> ;
Types d’exception
Il existe trois types d’exceptions :
• Exceptions prédéfinies (Exceptions systèmes nommées): Sont des
erreurs qui se produisent lors de l'exécution du programme. Oracle
attribue un nom à chaque exception (NO_DATA_FOUND).
• Exceptions définies par l’utilisateur (Exceptions utilisateurs
nommées): Sont déclenchées à la suite d’erreurs dans le code applicatif et
nommées lors de leur déclaration par le développeur .
• Exception internes (Exceptions système anonymes): Sont des erreurs
qui proviennent de l'environnement Oracle Database et déclenchée
automatiquement par le système d’exécution. Elles n’ont pas de nom mais
un code d’erreur (ORA-27102 :mémoire insuffisante)
Exceptions prédéfinies
Nom d’exception Erreur Oracle Détails
NO_DATA_FOUND ORA-01403 déclenché si la
commande SELECT INTO
ne retourne aucune ligne
ou si on fait référence à
un enregistrement non
initialisé d’un tableau
PL/SQL
STORAGE_ERROR ORA-06500 problème de ressources
mémoire dû à PL/SQL
TOO_MANY_ROWS ORA-01422 la commande SELECT
INTO retourne plus d’une
ligne
ZERO_DIVIDE ORA-01476 tentative de division par
zéro
NOT_LOGGED_ON ORA-01012 tentative d’accès à la
base sans être connecté
INVALID_CURSOR ORA-01001 opération incorrecte sur
un curseur, comme par
exemple la fermeture
d’un curseur qui n’a pas
été ouvert
Pour plus de détails: https://docs.oracle.com/cd/B10500_01/appdev.920/a96624/07_errs.htm
Exemple
Exception Simple:
1. <nom_procedure> [ (<argument1>, . . . ] ) ] ;
Cet appel peut se faire dans un bloc PLSQL (anonyme ou programme
stocké)
1. EXEC | EXECUTE <nom_procedure> [ (<argument1>, . . . ] ) ]
2. CALL <nom_procedure> [ (<argument1>, . . . ] ) ] ;
procédure stockée avec argument
Exemple d’Utilisation de IN
Exemple d’Utilisation de OUT
Exemple d’Utilisation de IN OUT
Qu’est-ce qu’une fonction
Une fonction est une procédure qui retourne une valeur.
RETURN EXPRESSION;
EXCEPTION WHEN <nom_exception> THEN <instructions>;
END [ <nom_fonction> ];
N.B: SEUL le type d’argument IN est acceptable par les fonctions
Exemple
Fonction avec argument
Appel d’une fonction
Les fonctions PL/SQL définies par l’utilisateur peuvent être appelées dans
un bloc PLSQL (anonyme ou programme stocké). La valeur retournée peut
être affectée à une variable.
Exemple:
Comme pour les curseurs, Il existe deux types d’affectation de valeur aux
paramètres:
1. Affectation par position: le paramètre effectif est substitué par la valeur formelle
2. Affectation par nom: le paramètre actuel est substitué par la valeur formelle à
l'aide du symbole de flèche (=>)
L’ordre spécifié dans la déclaration des paramètres de curseur doit être respecté lors de
l’ouverture du curseur.
On peut mélanger les deux types d’affectation; cependant, la notation de position doit
précéder la notation nommée.
Comme pour toute les variables, Il existe une autre manière d’affecter les valeurs à
des paramètres en ajoutant le mot clé DEFAULT. Ceci est applicable aux curseurs.
Exemple:
Les sous programmes
Si une variable est déclarée après la fin du sous programme cela créera
une erreur de compilation.
Exemple de sous programme
Procédure VS Fonction
Les procédures sont créées pour stocker une série d’actions à exécuter
ultérieurement. Une procédure peut accepter ou non des paramètres, qui ne
sont pas limités en nombre et peuvent être transférés du et vers
l’environnement appelant.
Les fonctions sont créées pour calculer une valeur, elles doivent retourner
une valeur à l’environnement appelant. Une fonction peut accepter ou non
des paramètres qui sont transmis de l’environnement. Une fonction ne peut
retourner qu’une seule valeur et ne peut pas accepter de paramètre OUT ou
IN OUT.
7
• Les triggers de lignes: ou bien triggers Row est un trigger dont le corps
s’exécute une fois pour chaque ligne concernée par l’évènement
déclenchant. Si l’évènement déclenchant n’affecte aucune ligne, le corps
du trigger n’est pas exécuté.
Exemple
Utilisation des qualificatifs OLD et NEW
Dans un déclencheur de niveau ligne (Trigger Row) il est possible de faire
référence aux valeurs d’une colonne avant et après le changement dû à un
ordre DML en préfixant le nom de celle-ci du qualificatif :OLD ou :NEW.
les valeurs des qualificatifs OLD et NEW varient selon l’ordre DML
effectué:
Syntaxe:
Exemple:
Déclenchement conditionnel
Grâce à la condition WHEN il est possible de restreindre le déclenchement
du trigger Row selon certaines conditions.
Exemple:
Les attributs conditionnels
Il est possible de combiner plusieurs évènements déclenchant en une
seule déclaration et personnaliser les actions du trigger selon l’événement
déclenchant. Ceci est grâce aux attributs conditionnels INSERTING, UPDATING
et DELETING à l’intérieur du corps du trigger.
Ces attributs sont inclus dans des expressions conditionnelles de type IF-
THEN-ELSE. Exemple:
Manipulation des triggers
Lorsque l’on a créé un trigger, il existe des commandes permettant de les
manipuler afin de les activer, les désactiver, les recompiler après modification
et les supprimer.