exception

Transcription

exception
Mostafa Hanoune
8
Traitement des Exceptions
Mostafa Hanoune
Objectifs
A la fin de ce chapitre, vous saurez :
• Définir des exceptions PL/SQL
• Reconnaître les exceptions non gérées
• Lister et utiliser les différents types de
traitements des exceptions PL/SQL
• Traiter les erreurs Oracle non pré-définies
• Décrire l'effet d'une propagation des erreurs
dans des blocs imbriqués
• Personnaliser les messages d’erreur PL/SQL
8-2
Objectifs
Dans ce chapitre, vous apprendrez ce que sont les exceptions PL/SQL et comment on les traite en utilisant
des mot-clés pré-définis, non pré-définis ou définis par l’utilisateur.
Les Bases PL/SQL 8-2
Mostafa Hanoune
Manipuler les Exceptions en PL/SQL
• Qu’est-ce qu’une exception ?
– Un identifiant PL/SQL, de type erreur,
déclenché pendant l’exécution du bloc
• Comment est-elle déclenchée ?
– Implicitement, par une erreur Oracle
– Explicitement, par le programme
• Comment la traiter ?
– En l’interceptant dans le traitement des
exceptions
– En la propageant à l’environnement appelant
8-3
Présentation
Une exception est un identifiant PL/SQL généré au cours de l’exécution d’un bloc qui termine le corps
principal des instructions. Un bloc s’arrête quand une exception PL/SQL est déclenchée, cependant vous
pouvez spécifier un traitement dans les exceptions afin de réaliser des instructions finales.
Deux méthodes pour déclencher une Exception
•
Lorsqu’une erreur Oracle se produit, l’exception associée est émise automatiquement. Par exemple,
si l’erreur ORA-01403 survient car un SELECT n’a ramenée aucune ligne, alors le PL/SQL émet
l’exception NO_DATA_FOUND.
•
Vous pouvez produire explicitement une exception en insérant une instruction RAISE dans un bloc.
L’exception ainsi émise peut être soit définie par l’utilisateur, soit pré-définie.
Les Bases PL/SQL 8-3
Mostafa Hanoune
Traitement des Exceptions
Intercepter l’exception
Exception
émise
Propager l’exception
DECLARE
DECLARE
BEGIN
BEGIN
EXCEPTION
Exception
interceptée END;
EXCEPTION
Exception
émise
END;
Exception non
interceptée
Exception propagée à
l’environnement appelant
8-4
Interception d’une Exception
Si une exception se produit dans la partie exécutable du bloc, le traitement se débranche au sousprogramme correspondant dans la section Exception du bloc. Si le PL/SQL traite convenablement
l’exception, alors elle n’est pas propagée au le bloc supérieur ou vers l’environnement appelant. Le bloc
PL/SQL s’exécute correctement.
Propagation d’une Exception
Si une exception se produit dans la partie exécutable du bloc et s’il n’y a pas de sous-programme lui
correspondant, alors le bloc PL/SQL aboutit à une erreur et l’exception est propagée à l’environnement
appelant.
Les Bases PL/SQL 8-4
Mostafa Hanoune
Types d’Exceptions
• Exception Oracle Pré-définie
• Exception Oracle Non Pré-définie
}
Déclenchées
implicitement
• Exception définie par l’utilisateur Déclenchées
explicitement
8-5
Types d’Exceptions
Vous pouvez utiliser des exceptions dans vos programmes pour éviter des interruptions en cours
d’exécution. Il existe trois types d’exceptions :
Exception
Erreur prédéfinie du
serveur Oracle
Erreur non prédéfinie
du serveur Oracle
Erreur définie par
l’utilisateur
Description
Une des 20 erreurs qui arrivent
le plus fréquemment en langage
PL/SQL
Toute autre erreur standard
d’Oracle Server
Une condition que le
programmeur définit comme
anormale
Indications de traitement
Ne pas la déclarer et laisser
Oracle Server l’émettre
implicitement
La déclarer à l’intérieur du
segment de déclaration et laisser
Oracle Server l’émettre
implicitement
La déclarer à l’intérieur du
segment de déclaration et
déclencher son émission
explicitement
Note : Certains outils d'application PL/SQL avec une interface côté client, comme Oracle Developer
Forms, possèdent leurs propres exceptions.
Les Bases PL/SQL 8-5
Mostafa Hanoune
Intercepter les Exceptions
Syntaxe
EXCEPTION
WHEN exception1 [OR exception2 . . .] THEN
instruction1;
instruction2;
. . .
[WHEN exception3 [OR exception4 . . .] THEN
instruction1;
instruction2;
. . .]
[WHEN OTHERS THEN
instruction1;
instruction2;
. . .]
8-6
Interception d’Exceptions
Vous pouvez intercepter n’importe quelle erreur en insérant les instructions correspondantes, à l’intérieur
de la section Exception du bloc PL/SQL. Chaque traitement d’exception contient une commande WHEN,
qui spécifie les conditions de l’exception, suivie d’une séquence d’instructions à exécuter lorsque cette
exception est déclenchée.
Syntaxe :
exception
Statement
OTHERS
Nom standard de l’exception pré-définie ou bien définie par
l’utilisateur et déclarer dans la section déclarative.
Une ou plusieurs instructions SQl ou PL/SQL
Clause de traitement d’Exception Optionnelle, qui intercepte toutes les
exceptions non gérées dans la même section d’exception.
Exception WHEN OTHERS
La section Exception intercepte seulement celles qui ont été définies ; toutes les autres exceptions ne sont
pas interceptées sauf si vous précisez la clause WHEN OTHERS. Ceci permet d’intercepter toute
exception qui n’a pas encore été traitée. C’est pourquoi OTHERS doit être la dernière instruction de la
section Exception.
La commande OTHERS intercepte toutes les exceptions qui ne l’ont pas déjà été. Certains outils Oracle
ont leurs propres exceptions pré-définies que vous pouvez utiliser pour provoquer certaines actions.
OTHERS intercepte également ces exceptions.
Les Bases PL/SQL 8-6
Mostafa Hanoune
Règles pour intercepter les
Exceptions
• WHEN OTHERS est la dernière clause.
• Le mot-clé EXCEPTION débute la
section de gestion des exceptions.
• Plusieurs Exceptions sont permises.
• Une seule exception est exécutée avant
de sortir d’un bloc.
8-7
Règles
•
Commencer la section Exception du bloc par le mot clé EXCEPTION.
•
Définir plusieurs traitements d’Exceptions pour un bloc, chacune ayant sa propre séquence
d’actions.
•
Lorsqu’une exception se produit, le PL/SQL n’exécute qu’une Seule traitement avant de sortir du
bloc.
•
Placer la commande OTHERS après toutes les autres commandes de traitement d’exceptions.
•
Vous pouvez employer au plus une commande OTHERS.
•
Les exceptions ne peuvent pas intervenir dans les instructions d’assignation ou dans les instructions
SQL.
Les Bases PL/SQL 8-7
Mostafa Hanoune
Erreurs Oracle pré-définies
• Utiliser le nom standard à l’intérieur de
la section Exception.
• Exemple d’exceptions pré-définies :
– NO_DATA_FOUND
– TOO_MANY_ROWS
– INVALID_CURSOR
– ZERO_DIVIDE
– DUP_VAL_ON_INDEX
8-8
Interception des erreurs Oracle pré-définies
Intercepter une erreur Oraclepré-définie en utilisant son nom standard à l’intérieur de la section
d’Exception.
Pour connaître la liste complète des exceptions pré-définies, voir
PL/SQL User’s Guide and Reference, Release 8, “Error Handling.”
Note : Le PL/SQL déclare les exceptions pré-définies dans le Package STANDARD.
Il est bon de toujours penser à gérer les exceptions NO_DATA_FOUND et TOO_MANY_ROWS qui
sont les plus courantes.
Les Bases PL/SQL 8-8
Exceptions pré-définies
ACCESS_INTO_NULL
Code
Erreur
Oracle
Server
ORA-06530
COLLECTION_IS_NULL
ORA-06531
CURSOR_ALREADY_OPEN
DUP_VAL_ON_INDEX
INVALID_CURSOR
INVALID_NUMBER
ORA-06511
ORA-00001
ORA-01001
ORA-01722
LOGIN_DENIED
ORA-01017
NO_DATA_FOUND
NOT_LOGGED_ON
ORA-01403
ORA-01012
PROGRAM_ERROR
ROWTYPE_MISMATCH
ORA-06501
ORA-06504
STORAGE_ERROR
ORA-06500
Nom de l’Exception
SUBSCRIPT_BEYOND_COUNT ORA-06533
SUBSCRIPT_OUTSIDE_LIMIT
ORA-06532
TIMEOUT_ON_RESOURCE
ORA-00051
TOO_MANY_ROWS
VALUE_ERROR
ORA-01422
ORA-06502
ZERO_DIVIDE
ORA-01476
Description
Assignation d’une valeur à un objet non
initialisé
Utilisation d’une méthode autre que EXISTS
sur une nested table non initialisée ou un varray
Ouverture d’un curseur déjà ouvert
Insertion d’une ligne en doublon
Opération interdite sur un curseur
Echec sur une conversion d’une chaîne de
caractères vers du number
Connexion à Oracle avec un utilisateur ou un
mot de passe invalide
SELECT mono-ligne retournant 0 ligne
Echec d’un appel DB dans un programme
PL/SQL car l’utilisateur n’est pas connecté
Le PL/SQL a un problème interne
Incompatibilité de type entre une variable Hôte
et une variable PL/SQL suite à une affectation
Dépassement de capacité mémoire ou mémoire
corrompue
Référence d’un élément d’une nested table ou
varray en utilisant un indice plus grand que le
nombre d’éléments dans la collection
Référence d’un élément d’une nested table ou
varray en utilisant un indice qui sort du
domaine autorisé (-1 par exemple)
Dépassement d’un timeout pour allocation
d’une ressource par Oracle
SELECT mono-ligne retournant plus d’1 ligne
Erreur d’arithmétique, de conversion, de
troncature, ou de limite de taille
Division par zéro
Les Bases PL/SQL 8-9
Mostafa Hanoune
Exception pré-définie
Syntaxe
BEGIN SELECT ... COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
instruction1;
instruction2;
WHEN TOO_MANY_ROWS THEN
instruction1;
WHEN OTHERS THEN
instruction1;
instruction2;
instruction3;
END;
8-10
Interception d’exceptions Oracle Server pré-définies
Une seule exception à la fois est déclenchée et traitée.
Les Bases PL/SQL 8-10
Mostafa Hanoune
Erreurs Oracle non pré-définies
Déclarer
Associer
Section DECLARE
• Nommer
l’exception
Traiter
Section
EXCEPTION
• Coder le PRAGMA • Traiter
EXCEPTION_INIT
l’exception
déclenchée
8-11
Interception d’erreurs Oracle non pré-définies
Vous pouvez intercepter une erreur Oracle non pré-définie en la déclarant au préalable, ou en utilisant la
commande OTHERS. L’exception déclarée est implicitement déclenchée. En PL/SQL, la clause pragma
EXCEPTION_INIT permet d’associer un nom d’exception à un code d’erreur Oracle. Ceci vous permet de
faire référence à n’importe quelle exception interne Oracle, par un nom et d’écrire un traitement
spécifique pour celle-ci.
Note : PRAGMA (aussi appelé pseudo-instruction) est un mot-clé qui signifie que l’instruction est
destinée au compilateur et qu’elle n’est donc pas traitée au moment de l’exécution du bloc PL/SQL. Plus
précisément, il conduit le compilateur à interpréter toutes les occurrences de l’exception par le code erreur
Oracle Server associé.
Les Bases PL/SQL 8-11
Mostafa Hanoune
Erreurs Oracle non pré-définies
Intercepter une erreur de violation de
contraintes (Erreur Oracle –2292)
DECLARE
e_emps_remaining
EXCEPTION;
PRAGMA EXCEPTION_INIT (e_emps_remaining,-2292);
v_deptno
dept.deptno%TYPE := &p_deptno;
BEGIN
DELETE FROM dept
WHERE
deptno = v_deptno;
COMMIT;
EXCEPTION
WHEN e_emps_remaining
THEN
DBMS_OUTPUT.PUT_LINE('Suppression Impossible du
dep:'||TO_CHAR(v_deptno)||'Employés existant ');
END;
1
2
3
8-12
Interception d’une exception Oracle non-prédéfinie
1. Déclarer le nom de l’exception dans la section DECLARE.
Syntaxe
exception EXCEPTION;
où : exception
est le nom de l’exception.
2. Associer l’exception déclarée au code standard de l’erreur Oracle Server en utilisant l’instruction
PRAGMA EXCEPTION_INIT.
Syntaxe
PRAGMA EXCEPTION_INIT(exception, erreur_number);
où : exception
erreur_number
est l’exception déclarée préalablement.
est un code standard de l’erreur Oracle Server.
3. Traiter l’exception ainsi déclarée dans la section EXCEPTION.
Exemple
S’il y a des employés dans un département , affichez un message à l’utilisateur l’informant que ce
département ne peut pas être supprimé.
Pour plus d ’ informations, voir
Oracle Server Messages, Release 8.
Les Bases PL/SQL 8-12
Mostafa Hanoune
Exceptions définies par
l’utilisateur
Déclarer
Section
DECLARE
• Nommer
l’exception
Déclencher
Section
EXECUTABLE
• Déclencher
explicitement
l’exception avec
RAISE
Traiter
Section
EXCEPTION
• Traiter
l’exception
declenchée
8-13
Interception d’exceptions définies par l’utilisateur
Le langage PL/SQL vous permet de définir vos propres exceptions. Les exceptions définies par
l’utilisateur en PL/SQL doivent être :
•
Déclarées dans la section DECLARE du bloc PL/SQL
•
Déclenchées explicitement à l’aide de l’instruction RAISE
Les Bases PL/SQL 8-13
Mostafa Hanoune
Exceptions définies par
l’utilisateur
exemple
DECLARE
e_invalid_product EXCEPTION;
BEGIN
UPDATE
product
SET
descrip = '&product_description'
WHERE
prodid = &product_number;
IF SQL%NOTFOUND THEN
RAISE e_invalid_product;
END IF;
COMMIT;
EXCEPTION
e_invalid_product
WHEN
THEN
DBMS_OUTPUT.PUT_LINE('Numéro de produit invalide.');
END;
1
2
3
8-14
Interception d’exceptions définies par l’utilisateur (suite)
Vous pouvez intercepter une exception définie par l’utilisateur en la déclarant et en la déclenchant
explicitement.
1. Déclarer le nom de l’exception dans la section DECLARE.
Syntaxe
exception EXCEPTION;
où : exception
est le nom de l’exception
2. Utiliser l’instruction RAISE pour déclencher explicitement l’exception dans la section
EXECUTABLE.
Syntaxe
RAISE exception;
où : exception
est l’exception préalablement déclarée
3. Traiter l’exception ainsi déclarée dans la section EXCEPTION.
Exemple
Ce bloc permet de mettre à jour la description d’un produit. L’utilisateur entre le code du produit et sa
nouvelle description. Si l’utilisateur entre un code produit qui n’existe pas, il n’y a pas de ligne mise à
jour dans la table PRODUCT. Une exception est produite et un message s’affiche pour avertir l’utilisateur
qu’il a saisi un code de produit incorrect.
Note : Vous pouvez utiliser l’instruction RAISE à l’intérieur d’un traitement Exceptions pour renvoyer la
même exception à l’environnement appelant.
Les Bases PL/SQL 8-14
Mostafa Hanoune
Fonctions d’interception des
Erreurs
• SQLCODE
Renvoie la valeur numérique associé au
code de l’erreur
• SQLERRM
Renvoie le message associé au code de
l’erreur
8-15
Fonctions d’interception des Erreurs
Lorsqu’une exception se produit, vous pouvez identifier le code et le message d’erreur associé à l’aide de
deux fonctions. Suivant le message ou la valeur du code, vous pouvez décider quelle action effectuer
après cette erreur.
SQLCODE renvoie le code Oracle de l’erreur pour les exceptions internes. Vous pouvez transmettre le
code de l’erreur à SQLERRM, qui renvoie alors le message associé ainsi que le code de l’erreur.
Fonction
SQLCODE
Description
Renvoie la valeur numérique du code de l’erreur (Vous pouvez
l’assigner à une variable de type NUMBER.)
SQLERRM
Renvoie la donnée contenant le message associé au code de l’erreur
exemple SQLCODE Values
Valeur SQLCODE
0
1
+100
negative number
Description
Pas d’exception enregistrée
Exception définie par l’utilisateur
Exception NO_DATA_FOUND
Autre code d’erreur Oracle Server
Les Bases PL/SQL 8-15
Mostafa Hanoune
Fonctions d’interception des
Erreurs
exemple
DECLARE
v_error_code
v_error_message
BEGIN
...
EXCEPTION
...
WHEN OTHERS THEN
ROLLBACK;
v_error_code :=
v_error_message
NUMBER;
VARCHAR2(255);
SQLCODE ;
:= SQLERRM ;
INSERT INTO erreurs VALUES(v_error_code,
v_error_message);
END;
8-16
Fonctions d’interception des Erreurs
Lorsqu’une exception est interceptée par la clause WHEN OTHERS, vous pouvez utiliser un ensemble de
fonctions standards pour identifier l’erreur.
L’exemple de la diapositive montre comment les valeurs de SQLCODE et SQLERRM peuvent être
assignées dans des variables et celles-ci utilisées dans des instructions SQL.
Il faut tronquer la valeur de SQLERRM à une certaine longueur avant d’essayer de l’écrire dans une
variable.
Note au formateur
N’utilisez pas directement, dans une instruction SQL, les fonctions se rapportant aux erreurs. Assignez
d’abord leurs valeurs dans une variable. Vous pouvez transmettre un code erreur à SQLERRM pour
renvoyer le message associé ; par exemple, “SQLERRM(-979)” renvoie “ORA-0979: not a GROUP BY
expression.” ces fonctions peuvent être utilisées comme de véritables paramètres — par exemple
“erreur_procedure(SQLERRM).”
Les Bases PL/SQL 8-16
Mostafa Hanoune
Environnements appelants
SQL*Plus
Affiche le code erreur et le message
à l’écran
Procedure
Builder
Affiche le code erreur et le message
à l’écran
Oracle
Developer
Forms
Accède facilement au code et au
message d’erreur à l’aide des
fonctions ERROR_CODE et
ERROR_TEXT
Une application Accède au code erreur grâce à la
du précompilateur structure de données SQLCA
Un bloc PL/SQL Intercepte les exceptions dans la
section Exceptions des blocs maîtres
principal
8-17
Propagation des exceptions
Au lieu d’intercepter une exception dans un bloc PL/SQL, vous pouvez propager l’exception afin de
permettre à l’environnement appelant de la traiter. Chaque environnement a sa propre façon d’accéder et
d’afficher les erreurs.
Les Bases PL/SQL 8-17
Mostafa Hanoune
Propagations des Exceptions
DECLARE
. . .
e_no_rows
exception;
e_integrity
exception;
PRAGMA EXCEPTION_INIT (e_integrity, -2292);
BEGIN
FOR c_record IN emp_cursor LOOP
Des sous-blocs
peuvent traiter une
exception ou la
transmettre à un bloc
de niveau supérieur.
BEGIN
SELECT ...
UPDATE ...
IF SQL%NOTFOUND THEN
RAISE e_no_rows;
END IF;
EXCEPTION
WHEN e_integrity THEN ...
WHEN e_no_rows THEN ...
END;
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN . . .
WHEN TOO_MANY_ROWS THEN . . .
END;
8-18
Propagation d’une exception à partir d’un sous-bloc
Lorsqu’un sous-bloc traite une exception, il se termine normalement,et l’exécution du traitement se
poursuit dans le bloc supérieur, juste après l’instruction END du sous-bloc.
Cependant, si un programme PL/SQL produit une exception et que le bloc ne prévoit pas de la traiter, elle
se propage successivement dans les blocs supérieurs jusqu’à trouver une fonction qui la gère. Si aucun de
ces blocs ne traite l’exception, le résultat donne une exception de non gérée dans l’environnement hôte.
Lorsque l’exception se propage à un bloc supérieur, les actions exécutables restantes de ce bloc sont
ignorées.
Un des avantages de ce comportement est que vous pouvez ainsi inclure des instructions nécessitant leurs
propres fonctions de traitement spécifiques dans leur propre bloc, tout en laissant les exceptions plus
générales être traitées dans le bloc de niveau supérieur.
Note au formateur (Pour la page 8-19)
RAISE_APPLICATION_ERROR ne rentre pas dans le cadre de ce cours car on ne traite pas ici les
unités de programme stockées en base. Elles sont abordées dans un autre cours, OPB. La version actuelle
de ce dernier cours n’introduit pas la notion de RAISE_APPLICATION_ ERROR , mais suppose que les
étudiants y sont familiarisés. Comme le cours développé ici est un prérequis obligatoire à OPB, une
introduction aux RAISE_APPLICATION_ ERROR est fournie avec cette version.
Les Bases PL/SQL 8-18
Mostafa Hanoune
Procédure
RAISE_APPLICATION_ERROR
Syntaxe
raise_application_error (error_number,
message[, {TRUE | FALSE}]);
• Cette procédure vous permet de délivrer
des messages d’erreur définis par
l’utilisateur à partir de sous-programmes
stockés
• Elle ne peut être appelée que durant
l’exécution d’un sous-programme stocké
dans la base de données
8-19
Utilisez la procédure RAISE_APPLICATION_ERROR pour renvoyer, une exception pré-définie, en
utilisant un code d’erreur non standard et un message d’erreur. Avec RAISE_APPLICATION_ERROR,
vous pouvez reporter des erreurs dans votre application et éviter ainsi de renvoyer des exceptions non
gérées.
Syntaxe :
error_number
est un code erreur pour l’exception, spécifié par l’utilisateur,
compris entre –20000 et –20999.
message
est le message défini par l’utilisateur pour l’exception. C’est une
chaîne de caractères de taille pouvant aller jusqu’à 2 048 bytes.
TRUE | FALSE
est un paramètre Booléen optionnel (Si TRUE, l’erreur est rangée
dans la pile des erreurs précédentes. Si FALSE , valeur par défaut
l’erreur remplace toutes les erreurs précédentes.)
Exemple
...
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR (-20201,
'Le manager n’’est pas un employé valide.');
END;
Les Bases PL/SQL 8-19
Mostafa Hanoune
Procédure
RAISE_APPLICATION_ERROR
• Elle peut être utilisée à deux endroits :
– Dans la Section Exécutable
– Dans le Section Exception
• Elle renvoie à l’utilisateur les conditions
de l’erreur de manière cohérente par
rapport aux erreurs du Serveur Oracle
8-20
Exemple
...
DELETE FROM emp
WHERE mgr = v_mgr;
IF SQL%NOTFOUND THEN
RAISE_APPLICATION_error(-20202,'Ce n’’est pas un manager Valide');
END IF;
...
Les Bases PL/SQL 8-20
Mostafa Hanoune
Résumé
• Types d’Exceptions :
– Erreur Oracle Server pré-définie
– Erreur Oracle Server non pré-définie
– Erreur définie par l’utilisateur
• Interception des Exceptions
• Traitement des Exceptions :
– intercepter l’exception dans un bloc
PL/SQL.
– Propager l’exception.
8-21
Les Bases PL/SQL 8-21
Mostafa Hanoune
Présentation de l’exercice
• Traiter des exceptions nommées
• Créer et faire référence à des
exceptions définies par l’utilisateur
8-22
Aperçu de l’exercice
Dans cet exercice, vous devez créer des fonctions de traitement d’exceptions pour des situations
particulières.
Les Bases PL/SQL 8-22
Exercice 8
1. Ecrire un bloc PL/SQL permettant de sélectionner le nom d’un employé en connaissant le montant
de son salaire.
a. Si le salaire entré, renvoie plus d’une ligne, traiter l’exception avec une fonction
appropriée et insérer dans la table MESSAGES le message suivant : “Plus d’un employé
avec le salaire : <salaire>.”
b. Si le salaire entré ne renvoie aucune ligne, traiter l’exception avec une fonction
appropriée et insérer dans la table MESSAGES le message suivant : “Pas d’employé avec
ce salaire : <salaire>.”
c. Si le salaire entré ne renvoie qu’une ligne, insérer dans la table MESSAGES le nom de
l’employé et le montant de son salaire.
d. Traiter toute autre exception avec une fonction appropriée et insérer dans la table
MESSAGES le message “Autre erreur.”
e. Tester le programme.
RESULTS
-------------------------------------------SMITH - 800
Plus d’un employé avec le salaire : 3000
Pas d’employé avec le salaire : 6000
2. Modifier p3q3.sql pour ajouter une fonction de traitement des exceptions.
a. Ecrire une fonction de traitement des exceptions pour transmettre un message à
l’utilisateur indiquant que le département n’existe pas.
b. Exécuter le programme PL/SQL en entrant un département qui n’existe pas.
Entrer le numéro de département : 50
Entrer la localité du département :HOUSTON
PL/SQL procedure successfully completed.
G_MESSAGE
-------------------------------------Le départment 50 n’existe pas
3. Ecrire un programme PL/SQL qui affiche le nombre d’employés qui gagnent 100 $
de plus ou de moins que le montant du salaire donné.
a. S’il n’y a pas d’employés dans cette tranche de salaires, afficher un message à l’utilisateur
en utilisant une exception.
b. S’il y a au moins un employé dans cette tranche de salaires, le message doit indiquer
combien d’employés sont dans cette tranche.
c. Traiter toute autre exception avec une fonction appropriée. Le message doit indiquer
qu’une autre erreur est survenue.
Les Bases PL/SQL 8-23
Exercice 8 (suite)
Entrer le salaire : 800
PL/SQL procedure successfully completed.
G_MESSAGE
---------------------------------------------------------Il y a 1 employé(s) avec un salaire entre 700 et 900
Entrer le salaire : 3000
PL/SQL procedure successfully completed.
G_MESSAGE
---------------------------------------------------------Il y a 3 employé(s) avec un salaire entre 2900 et 3100
Entrer le salaire : 6000
PL/SQL procedure successfully completed.
G_MESSAGE
---------------------------------------------------------Il n’y a pas d’employé avec un salaire entre 5900 et 6100
Les Bases PL/SQL 8-24

Documents pareils