Gestion d'exception

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 (NO_DATAFOUND, INVALID_CURSOR, TOO_MANY_ROWS, etc.)

  • Explicitement, par le programme (défini par l'utilisateur) : commande "RAISE nom_exception"

  • Par le développeur : Raise_application_error( -20023 , 'message')

Comment la traiter ?

  • En interceptant les exceptions

  • En la propageant à l'environnement appelant

RappelBD "Gestion des intervenants" : Schéma relationnel

1
tIntervenant (#pknom:varchar, prenom:varchar, poste:integer)
2
tCours (#pkannee:2000..2100, #pknum:integer, titre:varchar, type:C|TD|TP, fkintervenant=>tIntervenant, debut:date)

ExempleBD "Gestion des intervenants" : Gestion d'exception

1
CREATE OR REPLACE PROCEDURE pInsertIntervenant (pNom varchar2, pPrenom varchar2)
2
IS
3
BEGIN
4
  INSERT INTO tIntervenant (pknom, prenom)
5
  VALUES (pNom, pPrenom);
6
EXCEPTION
7
  WHEN DUP_VAL_ON_INDEX then
8
    DBMS_OUTPUT.PUT_LINE('Intervenant déjà existant : ' || pNom);
9
  WHEN OTHERS THEN
10
    RAISE;
11
END;
12
/
13
14
SET SERVEROUTPUT ON
15
16
BEGIN
17
  DBMS_OUTPUT.PUT_LINE('*** Programme indépendant ***');
18
  pInsertIntervenant('JOUGLET', 'Antoine');
19
  pInsertIntervenant('VINCENT', 'Antoine');
20
  pAfficheIntervenants;
21
END;
22
/		
1
*** Programme indépendant ***
2
Intervenant déjà existant : JOUGLET
3
** Liste des intervenants 1 **
4
-Stéphane Crozat
5
-Antoine Jouglet
6
-Antoine Vincent