La gestion des erreurs dans PL/SQL peut devenir complexe, surtout lorsque des exceptions ne sont pas correctement gérées.
Des erreurs non gérées peuvent entraîner des applications instables et mettre en péril l’intégrité des données.
Cet article vous guide à travers les meilleures pratiques pour gérer les exceptions en PL/SQL, assurant ainsi la robustesse et la fiabilité de vos applications.
Maîtriser le langage SQL en environnement SGBDR. SQL n'aura plus de secrets pour vous !

L’objectif de ce document est de consolider les connaissances sur la gestion des exceptions dans PL/SQL, un aspect essentiel pour créer des applications robustes et fiables. Ce récapitulatif permet de revoir les différents types d’exceptions, qu’elles soient prédéfinies ou personnalisées, et de comprendre comment déclencher et gérer des erreurs dans des blocs PL/SQL. À travers des exercices pratiques, les utilisateurs apprendront à créer des exceptions sur mesure en réponse à des conditions spécifiques dans le code, ainsi qu’à traiter les violations de contraintes d’intégrité lors de la manipulation des données.
Les types d’exceptions
- Exceptions prédéfinies (comme NO_DATA_FOUND, ZERO_DIVIDE, etc.)
- Exceptions non prédéfinies
La création et le déclenchement d’une exception dans un bloc PL/SQL
- Utilisation des mots-clés RAISE et EXCEPTION
Les exceptions anonymes
- Gestion d’erreurs spécifiques sans création d’une exception nommée
Les exceptions utilisateurs
- Création d’exceptions personnalisées pour des règles métier spécifiques
Gestion des exceptions PL/SQL
Pour mettre en pratique les concepts abordés, voici un exercice d’application.
- Modification de la commission d’un salarié :Créez un bloc PL/SQL permettant de modifier la commission d’un salarié. Si la nouvelle commission dépasse le salaire de l’employé, le programme doit déclencher une exception personnalisée.
- Suppression d’un salarié avec gestion des contraintes d’intégrité :Créez un bloc PL/SQL qui déclenche une exception « ORA-02292: violation de contrainte d’intégrité » lorsque l’on essaie de supprimer un salarié ayant traité des commandes.
Voici les solutions proposées ainsi que les résultats attendus pour l’exercice, permettant de vérifier et de comparer les réponses obtenues avec les solutions recommandées.
Solution 1: Modification de la commission d’un salarié avec vérification
Explication de la solution : Dans cette solution, un bloc PL/SQL est conçu pour modifier la commission d’un salarié. Le bloc commence par récupérer le salaire actuel du salarié concerné. Ensuite, une comparaison est faite entre la nouvelle commission souhaitée et le salaire actuel. Si la commission est supérieure au salaire, une exception personnalisée ex_commission_exceeds_salary est déclenchée, et un message d’erreur est affiché pour notifier que la commission ne peut pas dépasser le salaire. Si la commission est dans les limites acceptables, elle est mise à jour dans la base de données.
DECLARE
v_numero_sal NUMBER := 3; -- Remplacez par l'ID du salarié concerné
v_new_commission NUMBER := 3000; -- Nouvelle valeur de commission
v_salaire NUMBER;
ex_commission_exceeds_salary EXCEPTION;
BEGIN
-- Récupération du salaire du salarié
SELECT SALAIRE INTO v_salaire
FROM salaries
WHERE NUMERO_SAL = v_numero_sal;
-- Vérification si la commission dépasse le salaire
IF v_new_commission > v_salaire THEN
RAISE ex_commission_exceeds_salary;
ELSE
-- Mise à jour de la commission si condition respectée
UPDATE salaries
SET COMISSION = v_new_commission
WHERE NUMERO_SAL = v_numero_sal;
DBMS_OUTPUT.PUT_LINE('Commission mise à jour avec succès.');
END IF;
EXCEPTION
WHEN ex_commission_exceeds_salary THEN
DBMS_OUTPUT.PUT_LINE('Erreur : La commission ne peut pas être supérieure au salaire.');
END;
/
Résultat attendu :
- Si la commission est inférieure ou égale au salaire, le message « Commission mise à jour avec succès. » s’affiche, indiquant que l’opération a été effectuée.
- Si la commission dépasse le salaire, l’exception est déclenchée, et le message« Erreur :La commission ne peut pas être supérieure au salaire. »est affiché, sans modifier la commission.
Explication de la solution : Ce bloc PL/SQL tente de supprimer un salarié. Cependant, si le salarié a traité des commandes (liées par une contrainte de clé étrangère dans une autre table), une exception de type ORA-02292 est déclenchée par la base de données, indiquant une violation de contrainte d’intégrité. Le code capture cette erreur et affiche un message personnalisé pour informer que le salarié ne peut pas être supprimé s’il a des commandes associées.
Code :
DECLARE
v_numero_sal NUMBER := 3; -- Remplacez par l'ID du salarié à supprimer
BEGIN
DELETE FROM salaries
WHERE NUMERO_SAL = v_numero_sal;
DBMS_OUTPUT.PUT_LINE('Salarié supprimé avec succès.');
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -2292 THEN
DBMS_OUTPUT.PUT_LINE('ORA-02292: Violation de contrainte d''intégrité - impossible de supprimer un salarié avec des commandes associées.');
ELSE
DBMS_OUTPUT.PUT_LINE('Une erreur inattendue est survenue : ' || SQLERRM);
END IF;
END;
/
Résultat attendu :
- Si le salarié n’a pas de commandes associées, le message « Salarié supprimé avec succès. » est affiché, indiquant que la suppression a été réussie.
- Si le salarié a des commandes associées, l’exception ORA-02292 est capturée, et le message« ORA-02292 :Violation de contrainte d’intégrité – impossible de supprimer un salarié avec des commandes associées. »est affiché, sans supprimer le salarié.
Formez-vous gratuitement avec Alphorm !
Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.
FAQ
Qu'est-ce qu'une exception prédéfinie en PL/SQL ?
Comment créer une exception personnalisée en PL/SQL ?
Comment gérer une violation de contrainte d'intégrité en PL/SQL ?
Quels sont les types d'exceptions en PL/SQL ?
Pourquoi utiliser des exceptions anonymes en PL/SQL ?
Conclusion
La gestion des exceptions en PL/SQL est essentielle pour développer des applications fiables. Comment pouvez-vous intégrer ces techniques dans vos projets actuels pour améliorer la robustesse de votre code ?