0% ont trouvé ce document utile (0 vote)
82 vues9 pages

5 - Langage PLSQL - Execptions

Le document décrit la gestion des exceptions en PL/SQL. Il explique comment déclarer et lever des exceptions, ainsi que traiter les exceptions prédéfinies. Un exemple de bloc PL/SQL illustre le calcul d'impôts et de salaire net pour des employés en utilisant des exceptions.

Transféré par

aminehosny
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
82 vues9 pages

5 - Langage PLSQL - Execptions

Le document décrit la gestion des exceptions en PL/SQL. Il explique comment déclarer et lever des exceptions, ainsi que traiter les exceptions prédéfinies. Un exemple de bloc PL/SQL illustre le calcul d'impôts et de salaire net pour des employés en utilisant des exceptions.

Transféré par

aminehosny
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

LANGAGE PL/SQL

GESTION DES EXCEPTIONS

2022-2023 Enis BELHASSEN ([email protected])


Gestion des Exceptions
2

 Toute erreur (SQL ou applicative) entraîne automatiquement


un débranchement vers le paragraphe EXCEPTION :
Débranchement involontaire (erreur SQL)
BEGIN ou volontaire (erreur applicative)
instruction1;
instruction2;
……
instructionn;
EXCEPTION
WHEN exception1 THEN
………
WHEN exception2 THEN
………
WHEN OTHERS THEN
………
END;
Gestion des Exceptions
3

 Exceptions SQL déclenchée implicitement par une erreur Oracle


 Déjà définies (pas de déclaration) :
◼ DUP_VAL_ON_INDEX
◼ NO_DATA_FOUND / TOO_MANY_ROWS
◼ OTHERS

 Exceptions applicatives déclenchée explicitement par le programme


 Déclaration sans n°erreur (section DECLARE)
nomerreur EXCEPTION;
 Lever l'exception (section BEGIN)
RAISE nomerreur;
Gestion des Exceptions
4

 Fonctions PL/SQL pour la gestion d’erreurs


 SQLCODE : renvoyer la valeur numérique associée à la dernière
exception détectée
 SQLERRM : renvoyer le message associé au code de l’erreur
 Exceptions prédéfinies
Nom Code erreur Sqlcode Description
--------------------------------------------------------------------------------------------------
NO_DATA_FOUND ORA-01403 -1403 SELECT mono-ligne retournant 0 ligne
TOO_MANY_ROWS ORA-01422 -1422 SELECT mono-ligne retournant plus d’1 ligne
DUP_VAL_ON_INDEX ORA-00001 -1 Insertion d’une ligne en doublon
VALUE_ERROR ORA-06502 -6502 Erreur arithmétique, conversion ou limite de taille
ZERO_DIVIDE ORA-01476 -1476 Division par zéro
CURSOR_ALREADY_OPEN ORA-06511 -6511 Ouverture d’un curseur déjà ouvert
INVALID_NUMBER ORA-01722 -1722 Echec sur une conversion d’un chaîne de caractères
vers un nombre

Exemple de gestion d’exception
5

DECLARE
erreur EXCEPTION; ---- Déclaration exception
BEGIN

SELECT … INTO ……

IF ……… THEN RAISE erreur; ---- Levée exception


………
EXCEPTION
WHEN NO_DATA_FOUND THEN ---- Exception prédéfinie
………
WHEN erreur THEN ---- Traitement exception
………
WHEN OTHERS THEN ---- Exception prédéfinie
………
END;
Exemple de gestion d’exception
6

DECLARE
nbre_emp INTEGER;
aucun_emp EXCEPTION; ---- Déclaration exception
BEGIN
SELECT COUNT(*) INTO nbre_emp FROM emp;
IF nbre_emp = 0 THEN
RAISE aucun_emp; ---- Levée exception
ELSE
DBMS_OUTPUT.PUT_LINE('La table EMP contient '||nbre_emp||' employes');
END IF;
EXCEPTION
WHEN aucun_emp THEN ---- Traitement exception
DBMS_OUTPUT.PUT_LINE('La table EMP est vide');
WHEN OTHERS THEN ---- Exception prédéfinie
DBMS_OUTPUT.PUT_LINE('Erreur inconnue ' || SQLERRM);
END;
/
Exemple de gestion d’exception
7

DECLARE
c INTEGER;
aucun_emp EXCEPTION; ---- Déclaration exception
BEGIN
SELECT COUNT(*) INTO c FROM emp;
IF c=0 THEN
RAISE aucun_emp; ---- Levée exception
………
EXCEPTION
WHEN aucun_emp THEN ---- Traitement exception
RAISE_APPLICATION_ERROR(-20501, 'La table EMP est vide');
………
END;
/

La procédure RAISE_APPLICATION_ERROR permet de définir des messages d'erreur


personnalisés en indiquant :
• numero_erreur : représente un entier négatif compris entre -20000 et -20999
• message : représente le texte du message d'une longueur maximum de 2048 octets
Exercice
8

Écrire un bloc anonyme PL/SQL permettant de calculer et d’afficher pour


chaque employé le montant de l’impôt et le net à payer :
 Définir et parcourir un curseur permettant de récupérer les noms des
employés (ENAME), leurs salaires (SAL) et leurs commissions (COMM)
 Pour chaque employé, afficher un message à l’écran indiquant son nom,
son salaire ainsi que le montant de l’impôt et le net à payer qui doivent
être calculés comme suit :
 Montant de l’impôt :
◼ Si le salaire est inférieur à 1000 alors l’impôt = 25% du salaire
◼ Si le salaire est compris entre 1000 et 1500 alors l’impôt = 30 % du salaire
◼ Si le salaire supérieur à 1500 alors l’impôt = 35 % du salaire
 Net à payer = salaire (SAL) + commission (COMM) – Montant de l’impôt
NB : la commission d’un employé peut avoir une valeur NULL
 Programmer l’exception prédéfinie OTHERS en affichant le message
suivant : « Erreur inconnue !!! »
Exercice
9

DECLARE
impot emp.sal%type;
net_payer emp.sal%type;
BEGIN
FOR emp_record IN (SELECT ename, sal, comm FROM emp)
LOOP
IF (emp_record.sal < 1000)
THEN impot := emp_record.sal * 0.25;
ELSIF emp_record.sal <= 1500
THEN impot := emp_record.sal * 0.3;
ELSE impot := emp_record.sal * 0.35;
END IF;
net_payer := emp_record.sal + nvl(emp_record.comm, 0) - impot;
DBMS_OUTPUT.PUT_LINE('L''employe '||emp_record.ename ||
' - Salaire = ' ||emp_record.sal|| ' - Impot = ' ||impot||' - Net a payer = ' ||net_payer);
END LOOP;
EXCEPTION
WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Erreur inconnue !!!');
END;
/

Vous aimerez peut-être aussi