Professional Documents
Culture Documents
Gnralits - PL/SQL
PL/SQL est une extension procdurale PL/SQL est une extension procdurale du langage SQL. du langage SQL. Possibilit d inclure des requtes et Possibilit d inclure des requtes et des ordres de manipulation des des ordres de manipulation des donnes ll intrieur d une structure donnes intrieur d une structure algorithmique. algorithmique.
Intrts du PL/SQL
Amlioration des Performances Amlioration des Performances
SQL SQL SQL SQL
Application Application
Noyau Noyau
Application Application
Noyau Noyau
Intrts du PL/SQL
Dveloppement MODULAIRE Dveloppement MODULAIRE
DECLARE
BEGIN
EXCEPTION
END;
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
Intrts du PL/SQL
Portabilit. Portabilit. Utilisation de variables. Utilisation de variables. Structures de contrle. Structures de contrle. Gestion des erreurs Gestion des erreurs
Types de BLOC
Anonyme
[DECLARE] [DECLARE]
Procdure
PROCEDURE name PROCEDURE name IS IS BEGIN BEGIN --statements --statements [EXCEPTION] [EXCEPTION] END; END;
Fonction
FUNCTION name FUNCTION name RETURN datatype RETURN datatype IS IS BEGIN BEGIN --statements --statements RETURN value; RETURN value; [EXCEPTION] [EXCEPTION] END; END;
Utilisation d un BLOC
Bloc Bloc Anonyme Anonyme Procdure/ Procdure/ fonction fonction Stockes Stockes Procdure/ Procdure/ fonction fonction applicative applicative Package Package procdure/ procdure/ fonction fonction
END;
Variables
Types de Variables
Variables PL/SQL : Variables PL/SQL : Scalaire Scalaire
Structure Structure Rfrence Rfrence LOB (Grands Objets - Large Object) LOB (Grands Objets - Large Object)
Exemples Exemples
Declare Declare v_hiredate v_hiredate v_deptno v_deptno v_location v_location c_comm c_comm DATE; DATE; NUMBER(2) NOT NULL := 10; NUMBER(2) NOT NULL := 10; VARCHAR2(13) := 'Atlanta'; VARCHAR2(13) := 'Atlanta'; CONSTANT NUMBER := 1400; CONSTANT NUMBER := 1400;
Affectation de valeur
Syntaxe Syntaxe
Nom_variable := expr; Nom_variable := expr;
Exemples Exemples Affecter une date dembauche. Affecter une date dembauche.
v_hiredate := To_DATE(03-JAN-2000','DD-MON-99'); v_hiredate := To_DATE(03-JAN-2000','DD-MON-99');
Type Scalaire
VARCHAR2 (longueur-maximale) VARCHAR2 (longueur-maximale) VARCHAR VARCHAR NUMBER [(prcision, dcimales)] NUMBER [(prcision, dcimales)] DATE DATE CHAR [(longueur-maximale)] CHAR [(longueur-maximale)] LONG LONG LONG RAW LONG RAW BOOLEAN BOOLEAN BINARY_INTEGER BINARY_INTEGER PLS_INTEGER PLS_INTEGER
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
Cours PL/SQL daprs cours ORACLE - OAI / 16
Utilisation du suffixe %TYPE aprs : Utilisation du suffixe %TYPE aprs : Nom-table.nom-colonne. Nom-table.nom-colonne.
Nom-variable Nom-variable
Types Structurs
PL/SQL Table PL/SQL Table PL/SQL Enregistrement (RECORD) PL/SQL Enregistrement (RECORD)
Type LOB
Texte (CLOB) Photo (BLOB) Film (BFILE) NCLOB
Variables de lien
Variable de lien ou Variable hte Variable de lien ou Variable hte Prfixer le nom de variable par (:) Prfixer le nom de variable par (:) Exemple : Exemple :
Ranger le salaire annuel dans une variable de lien :: Ranger le salaire annuel dans une variable de lien
:g_monthly_sal := v_sal / 12; :g_monthly_sal := v_sal / 12;
Instructions
Mettre le nom d employ en lettres Mettre le nom d employ en lettres minuscules : minuscules :
v_ename v_ename := LOWER(v_ename); := LOWER(v_ename);
Bloc externe
Bloc imbriqu
Blocs Imbriqus
Un bloc peut tre insr en lieu et place Un bloc peut tre insr en lieu et place dune instruction. dune instruction. Un bloc imbriqu correspond une Un bloc imbriqu correspond une instruction. instruction. La section EXCEPTION peut contenir La section EXCEPTION peut contenir des blocs imbriqus. des blocs imbriqus.
Visibilit de x
Visibilit de y
DECLARE DECLARE V_SAL NUMBER(7,2) := 50000; V_SAL NUMBER(7,2) := 50000; V_COMM NUMBER(7,2) := 0; V_COMM NUMBER(7,2) := 0; V_TOTAL_COMP NUMBER(7,2) := V_SAL + V_COMM; V_TOTAL_COMP NUMBER(7,2) := V_SAL + V_COMM; BEGIN ... BEGIN ... V_MESSAGE := 'CLERK not'||V_MESSAGE; V_MESSAGE := 'CLERK not'||V_MESSAGE; END; END; V_MESSAGE := 'SALESMAN'||V_MESSAGE; V_MESSAGE := 'SALESMAN'||V_MESSAGE; END; END;
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
Cours PL/SQL daprs cours ORACLE - OAI / 35
Oprateurs en PL/SQL
Logique Logique Arithmtique Arithmtique Concatnation Concatnation Parenthses possibles Parenthses possibles Oprateur exponentiel (**) Oprateur exponentiel (**)
Oprateurs en PL/SQL
Exemples Exemples Incrment de lindice dune boucle. Incrment de lindice dune boucle.
v_count v_count := v_count + 1; := v_count + 1;
Initialisation de valeur pour un Initialisation de valeur pour un indicateur boolen. indicateur boolen.
v_equal v_equal := (v_n1 = v_n2); := (v_n1 = v_n2);
Test de la valeur dun numro Test de la valeur dun numro demploy demploy
v_valid v_valid
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
NUMBER(2); NUMBER(2); VARCHAR2(15); VARCHAR2(15); deptno, loc deptno, loc v_deptno, v_loc v_deptno, v_loc dept dept dname = 'SALES'; dname = 'SALES';
UPDATE
DELETE
Ajout de donnes
Exemple Exemple Ajout d un nouvel employ dans la table Ajout d un nouvel employ dans la table EMP. EMP.
BEGIN BEGIN INSERT INTO emp(empno, ename, job, deptno) INSERT INTO emp(empno, ename, job, deptno) VALUES(empno_sequence.NEXTVAL, 'HARDING', VALUES(empno_sequence.NEXTVAL, 'HARDING', 'CLERK', 10); 'CLERK', 10); END; END;
Modification de donnes
Exemple Exemple Modification de la valeur du salaire des Modification de la valeur du salaire des employs 'ANALYST'. employs 'ANALYST'.
DECLARE v_sal_increase emp.sal%TYPE := 2000; BEGIN UPDATE emp SET sal = sal + v_sal_increase WHERE job = 'ANALYST'; END;
Suppression de donnes
Exemple Exemple Supprimer les employs dun Supprimer les employs dun dpartement .. dpartement
DECLARE DECLARE v_deptno emp.deptno%TYPE := 10; v_deptno emp.deptno%TYPE := 10; BEGIN BEGIN DELETE FROM emp DELETE FROM emp WHERE deptno = v_deptno; WHERE deptno = v_deptno; END; END;
Dbut de transaction : premier ordre Dbut de transaction : premier ordre LMD. LMD. Fin de transaction explicite : COMMIT Fin de transaction explicite : COMMIT ou ROLLBACK. ou ROLLBACK.
Accs multilignes
Curseur SQL
Zone de travail prive. Zone de travail prive. Deux types de curseurs : Deux types de curseurs :
Implicite Implicite Explicite (dclar) Explicite (dclar)
Toute excution dordre SQL utilise un Toute excution dordre SQL utilise un curseur. curseur. Un code statut est positionn la fin Un code statut est positionn la fin d excution de lordre SQL. d excution de lordre SQL.
Structures de contrle
Structures de contrle
Deux structures : Deux structures : Alternative Alternative Rptitive. Rptitive.
Structures de contrle
STRUCTURE ALTERNATIVE STRUCTURE ALTERNATIVE Instruction IF Instruction IF Trois formes : Trois formes : IF-THEN-END IF IF-THEN-END IF IF-THEN-ELSE-END IF IF-THEN-ELSE-END IF IF-THEN-ELSIF-END IF IF-THEN-ELSIF-END IF
Instruction IF
Syntaxe Syntaxe
IF condition THEN IF condition THEN instructions; instructions; [ELSIF condition THEN [ELSIF condition THEN instructions;] instructions;] [ELSE [ELSE instructions;] instructions;] END IF; END IF;
Exemple : Exemple : N manager = 22 si nom employ = Osborne. N manager = 22 si nom employ = Osborne.
IF v_ename IF v_ename v_mgr := v_mgr := END IF; END IF;
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
Instruction IF-THEN-ELSE
VRAI IF condition FAUX
THEN actions THEN actions (incluant autres IF) (incluant autres IF)
ELSE actions ELSE actions (incluant autres IF) (incluant autres IF)
Instruction IF-THEN-ELSE
Exemple Exemple
... ... IF v_shipdate IF v_shipdate v_ship_flag v_ship_flag ELSE ELSE v_ship_flag v_ship_flag END IF; END IF; ... ...
- v_orderdate < 5 THEN - v_orderdate < 5 THEN := 'Acceptable'; := 'Acceptable'; := 'Unacceptable'; := 'Unacceptable';
Instruction IF-THEN-ELSIF
IF condition IF condition VRAI
Instruction IF-THEN-ELSIF
Exemple Exemple
. . . . . . IF v_start > 100 THEN IF v_start > 100 THEN v_start := 2 * v_start; v_start := 2 * v_start; ELSIF v_start >= 50 THEN ELSIF v_start >= 50 THEN v_start := .5 * v_start; v_start := .5 * v_start; ELSE ELSE v_start := .1 * v_start; v_start := .1 * v_start; END IF; END IF; . . . . . .
Structure rptitive
Une boucle rpte une instruction ou Une boucle rpte une instruction ou une squence dinstructions plusieurs une squence dinstructions plusieurs fois. fois. Trois possibilits : Trois possibilits :
instruction LOOP instruction LOOP Instruction FOR Instruction FOR instruction WHILE instruction WHILE
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
Cours PL/SQL daprs cours ORACLE - OAI / 60
Instruction Loop
Syntaxe Syntaxe
LOOP LOOP instruction(s); instruction(s); . . . . . . EXIT [WHEN condition]; EXIT [WHEN condition]; END LOOP; END LOOP;
Instruction Loop
Exemple Exemple
DECLARE DECLARE v_ordid item.ordid%TYPE := 601; v_ordid item.ordid%TYPE := 601; v_counter NUMBER(2) := 1; v_counter NUMBER(2) := 1; BEGIN BEGIN LOOP LOOP INSERT INTO item(ordid, itemid) INSERT INTO item(ordid, itemid) VALUES(v_ordid, v_counter); VALUES(v_ordid, v_counter); v_counter := v_counter + 1; v_counter := v_counter + 1; EXIT WHEN v_counter > 10; EXIT WHEN v_counter > 10; END LOOP; END LOOP; END; END;
Instruction FOR
Syntaxe Syntaxe
FOR indice in [REVERSE] FOR indice in [REVERSE] borne-infrieure..borne-suprieure LOOP borne-infrieure..borne-suprieure LOOP instruction 1; instruction 1; instruction 2; instruction 2; . . . . . . END LOOP; END LOOP;
Le nombre de rptitions est contrl Le nombre de rptitions est contrl par lindice. par lindice. Ne pas dclarer lindice, sa dclaration Ne pas dclarer lindice, sa dclaration est implicite. est implicite.
Instruction FOR
Rgles : Rgles : Lindice nest utilisable qu lintrieur de Lindice nest utilisable qu lintrieur de la boucle. la boucle. Il est interdit daffecter une valeur Il est interdit daffecter une valeur lindice. lindice.
Instruction FOR
Exemple Exemple Cration de 10 lignes pour la commande de Cration de 10 lignes pour la commande de n 601. n 601.
DECLARE DECLARE v_ordid item.ordid%TYPE v_ordid item.ordid%TYPE BEGIN BEGIN FOR i IN 1..10 LOOP FOR i IN 1..10 LOOP INSERT INTO item(ordid, INSERT INTO item(ordid, VALUES(v_ordid, i); VALUES(v_ordid, i); END LOOP; END LOOP; END; END; := 601; := 601;
itemid) itemid)
Instruction WHILE
Syntaxe Syntaxe
WHILE condition LOOP WHILE condition LOOP instruction 1; instruction 1; instruction2; instruction2; . . . . . . END LOOP; END LOOP; La condition est value en dbut de boucle.
Les instructions de la boucle sont Les instructions de la boucle sont rptes tant que la condition est vraie. rptes tant que la condition est vraie.
Instruction WHILE
Exemple Exemple
ACCEPT p_new_order PROMPT 'Enter the order number: ACCEPT p_new_order PROMPT 'Enter the order number: ACCEPT p_items ACCEPT p_items PROMPT 'Enter the number of items in this order: PROMPT 'Enter the number of items in this order: DECLARE DECLARE v_count NUMBER(2) := 1; v_count NUMBER(2) := 1; BEGIN BEGIN WHILE v_count <= &p_items LOOP WHILE v_count <= &p_items LOOP INSERT INTO item (ordid, itemid) INSERT INTO item (ordid, itemid) VALUES (&p_new_order, v_count); VALUES (&p_new_order, v_count); v_count := v_count + 1; v_count := v_count + 1; END LOOP; END LOOP; COMMIT; COMMIT; END; END; / /
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
Types Structurs
Deux types: Deux types: Enregistrement (RECORD) Enregistrement (RECORD)
Tableau (TABLE PL/SQL) Tableau (TABLE PL/SQL)
Contiennent des composants internes Contiennent des composants internes Sont rutilisables Sont rutilisables
Enregistrement PL/SQL
Peut contenir un ou plusieurs composants Peut contenir un ou plusieurs composants de type : scalaire, RECORD ou TABLE de type : scalaire, RECORD ou TABLE PL/SQL. PL/SQL. Identique la structure enregistrement en Identique la structure enregistrement en L3G. L3G. Diffrent de la notion de ligne de table Diffrent de la notion de ligne de table relationnelle. relationnelle. Considre un ensemble de champs Considre un ensemble de champs comme une unit logique. comme une unit logique. Peut tre utilis pour recevoir une ligne de Peut tre utilis pour recevoir une ligne de table. table.
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
Cours PL/SQL daprs cours ORACLE - OAI / 72
Utilisation de %ROWTYPE
Permet de dclarer une variable de Permet de dclarer une variable de mme structure quune ligne de table mme structure quune ligne de table ou de vue. ou de vue. Nom_table%ROWTYPE. Nom_table%ROWTYPE. Les champs de lenregistrement ont Les champs de lenregistrement ont mme nom et mme type que ceux des mme nom et mme type que ceux des colonnes de la table ou de la vue. colonnes de la table ou de la vue.
Utilisation de %ROWTYPE
Exemples Exemples Dclarer une variable pour stocker la Dclarer une variable pour stocker la mme information que celle dfinie dans mme information que celle dfinie dans la table DEPT. la table DEPT.
dept_record dept_record dept%ROWTYPE; dept%ROWTYPE;
Dclare une variable pour stocker la Dclare une variable pour stocker la mme information que celle dfinie dans mme information que celle dfinie dans la table EMP. la table EMP.
emp_record emp_record emp%ROWTYPE; emp%ROWTYPE;
Avantage de %ROWTYPE
Il n est pas ncessaire de connatre les Il n est pas ncessaire de connatre les caractristiques des colonnes de la caractristiques des colonnes de la ligne de rfrence .. ligne de rfrence Mise jour automatique en cas de Mise jour automatique en cas de modification de la structure de la ligne modification de la structure de la ligne de rfrence. de rfrence. Utilisable avec SELECT pour recueillir Utilisable avec SELECT pour recueillir les donnes dune ligne. les donnes dune ligne.
Tables PL/SQL
Compos de postes identiques de type : Compos de postes identiques de type : Scalaire Scalaire
Enregistrement Enregistrement
Rfrence un poste par cl primaire Rfrence un poste par cl primaire (PRIMARY KEY) de type (PRIMARY KEY) de type BINARY_INTEGER BINARY_INTEGER
Exemple Exemple Dclarer une table de noms. Dclarer une table de noms.
... ... TYPE nom_table_type IS TABLE OF emp.ename%TYPE TYPE nom_table_type IS TABLE OF emp.ename%TYPE INDEX BY BINARY_INTEGER; INDEX BY BINARY_INTEGER; table_nom nom_table_type; table_nom nom_table_type; ... ...
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
Cours PL/SQL daprs cours ORACLE - OAI / 79
Table denregistrements
Syntaxe - poste de type enregistrement Syntaxe - poste de type enregistrement Utilisation de %ROWTYPE. Utilisation de %ROWTYPE. Exemple Exemple Dclarer une variable pour recevoir les Dclarer une variable pour recevoir les donnes de la table DEPT. donnes de la table DEPT.
DECLARE DECLARE TYPE dept_table_type IS TABLE OF dept%ROWTYPE TYPE dept_table_type IS TABLE OF dept%ROWTYPE INDEX BY BINARY_INTEGER; INDEX BY BINARY_INTEGER; dept_table dept_table_type; dept_table dept_table_type;
CURSEUR Explicite
Curseur
Tout ordre SQL utilise un curseur pour Tout ordre SQL utilise un curseur pour sexcuter : sexcuter : curseur implicite curseur implicite
tout ordre LMD (DML) tout ordre LMD (DML) SELECT INTO ... sous PL/SQL SELECT INTO ... sous PL/SQL
curseur explicite curseur explicite dclar dans un module dclar dans un module
Dclaration
requte SQL
Libration
du curseur
Fermeture du curseur.
Requte sans clause INTO. Requte sans clause INTO. Possibilit de clause ORDER BY. Possibilit de clause ORDER BY.
Ouverture du curseur
Syntaxe Syntaxe
OPEN nom_curseur; OPEN nom_curseur;
Excution de la requte et gnration Excution de la requte et gnration des lignes rsultats au niveau du des lignes rsultats au niveau du serveur. serveur. Pas derreur si la requte ne slectionne Pas derreur si la requte ne slectionne pas de ligne. pas de ligne. Possibilit de tester le statut du curseur Possibilit de tester le statut du curseur aprs excution de lordre FETCH. aprs excution de lordre FETCH.
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
Cours PL/SQL daprs cours ORACLE - OAI / 91
Distribue les valeurs des colonnes de la Distribue les valeurs des colonnes de la ligne courante dans les variables de ligne courante dans les variables de rception. rception. Effectue une correspondance par Effectue une correspondance par position. position. Renvoie un code statut. Renvoie un code statut.
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
Cours PL/SQL daprs cours ORACLE - OAI / 92
Fermeture du curseur
Syntaxe Syntaxe
CLOSE CLOSE nom_curseur; nom_curseur;
Ferme le curseur et libre les Ferme le curseur et libre les ressources. ressources. Possibilit de r-ouvrir le mme Possibilit de r-ouvrir le mme curseur. curseur.
%ROWCOUNT
Nombre
%ISOPEN
La distribution de ligne ne seffectue La distribution de ligne ne seffectue que pour un curseur ouvert. que pour un curseur ouvert. Permet de savoir si un curseur est Permet de savoir si un curseur est ouvert avant dexcuter un ordre fetch. ouvert avant dexcuter un ordre fetch. Exemple Exemple
IF NOT emp_cursor%ISOPEN THEN IF NOT emp_cursor%ISOPEN THEN OPEN emp_cursor; OPEN emp_cursor; END IF; END IF; LOOP LOOP FETCH emp_cursor... FETCH emp_cursor...
Curseur et Enregistrement
Distribution des donnes de la ligne dans Distribution des donnes de la ligne dans une structure RECORD. une structure RECORD. Exemple Exemple
DECLARE DECLARE CURSOR emp_cursor IS CURSOR emp_cursor IS SELECT empno, ename SELECT empno, ename FROM emp; FROM emp; emp_record emp_record emp_cursor%ROWTYPE; emp_cursor%ROWTYPE; BEGIN BEGIN OPEN emp_cursor; OPEN emp_cursor; LOOP LOOP FETCH emp_cursor INTO emp_record; FETCH emp_cursor INTO emp_record; ... ...
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
Cours PL/SQL daprs cours ORACLE - OAI / 99
Raccourci pour grer la distribution des Raccourci pour grer la distribution des lignes. lignes. Excute toutes les tapes (open, fetch, Excute toutes les tapes (open, fetch, close). close). Dclaration implicite de lenregistrement. Dclaration implicite de lenregistrement.
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
Cours PL/SQL daprs cours ORACLE - OAI / 100
Curseur paramtr
Affectation des valeurs des paramtres lors de louverture du curseur. Le mme curseur peut tre ouvert plusieurs fois avec des valeurs de paramtres diffrentes.
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
Cours PL/SQL daprs cours ORACLE - OAI / 103
Verrouille les lignes slectionnes pour Verrouille les lignes slectionnes pour la dure de la transaction. la dure de la transaction. Verrouille les lignes avant lexcution Verrouille les lignes avant lexcution d un ordre update ou delete. d un ordre update ou delete.
Curseur en vue de modifier ou supprimer les lignes slectionnes. Utiliser la clause FOR UPDATE dans lexpression du curseur. Utiliser la clause WHERE CURRENT OF pour faire rfrence la dernire ligne distribue par le curseur.
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
Cours PL/SQL daprs cours ORACLE - OAI / 108
Gestions Gestions Capture dans le module qui la dtecte. Capture dans le module qui la dtecte.
Propagation lenvironnement. Propagation lenvironnement.
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
Cours PL/SQL daprs cours ORACLE - OAI / 111
Propagation de lexception
DECLARE BEGIN EXCEPTION END;
EXCEPTION
Cration de lexception
Types dExceptions
Erreur mise par le serveur Erreur mise par le serveur Prdfinies Prdfinies
Non prdfinies Non prdfinies
Rfrence
Section gestion des exceptions
Section dclarative
Dclaration Association
dun nom dexception
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
Capture de
lexception
lerreur
1 2
Declare
Section dclarative
Raise
Section excution
Rfrence
Section gestion des exceptions
Dclaration
dun nom dexception
Gnration de
lexception
Traitement
de lexception
Procdure RAISE_APPLICATION_ERROR
Syntaxe Syntaxe
raise_application_error (numro-erreur, raise_application_error (numro-erreur, message[, {TRUE | FALSE}]); message[, {TRUE | FALSE}]);
Permet de dfinir une erreur (numro Permet de dfinir une erreur (numro [entre -20000 et -20999] et texte du message) [entre -20000 et -20999] et texte du message) dans un bloc PL/SQL. dans un bloc PL/SQL. Utilisable dans les sections de code Utilisable dans les sections de code dun bloc PL/SQL. dun bloc PL/SQL.
C. Bonnet // R. Chapuis C. Bonnet R. Chapuis
Cours PL/SQL daprs cours ORACLE - OAI / 123
Procdure RAISE_APPLICATION_ERROR
Utilisable : Utilisable : dans la section Excution dans la section Excution
dans la section Exception dans la section Exception
La gnration de lerreur est conforme La gnration de lerreur est conforme au standard du serveur et est traitable au standard du serveur et est traitable comme telle. comme telle.
Procdure RAISE_APPLICATION_ERROR
Exemple Exemple
EXCEPTION EXCEPTION WHEN NO_DATA_FOUND THEN WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR (-20201, RAISE_APPLICATION_ERROR (-20201, Ligne NON trouve ); Ligne NON trouve ); END; END;
SQLCODE ; := SQLERRM ;
Un bloc peut grer ses exceptions ou les transmettre au bloc de niveau suprieur.