Академический Документы
Профессиональный Документы
Культура Документы
Narjess Touzani-Chebaane
2017/2018
Introduction
[ DECLARE ]
……
BEGIN
……..
[ EXCEPTION
END;
/ 2
Gestion des exceptions
3
Gestion des erreurs standards
SQLCODE : Renvoie le statut d’erreur de la
dernière instruction exécutée. Si l’instruction a
été exécutée sans erreur, sa valeur est à zéro.
4
Quelques erreurs standards
5
Description de traitement de l’erreur
BEGIN
….
EXCEPTION
WHEN NomErreur1 THEN
TraitementErreur1 ;
…..
[WHEN NomErreur_i [OR NomErreur_j] THEN
TraitementErreurN ;
7
Exemple 2
Insertion d’une nouvelle ligne dans la table Livraison, dont
les informations correspondantes sont données par
l’utilisateur. Traiter les éventuelles erreurs standards qui
peuvent survenir, ainsi que les cas où :
8
PROCEDURES, FONCTIONS
STOCKEES ET PACKAGES
LES PROCEDURES : Création
12
Exemples
Appel de la procédure InfoFournisseur à partir d’un
bloc PL/SQL :
DECLARE
Vnom Fournisseur.NomF%TYPE ;
BEGIN
...
InfoFournisseur (12, Vnom);
END;
/
13
LES PROCEDURES : Suppression
14
LES FONCTIONS : Création
CREATE [OR REPLACE] FUNCTION NomFonction
[(argument [IN] type [, argument [IN] type ] …) ]
RETURN type_retour
[IS | AS]
[déclaration_des_variables_locales]
BEGIN
définit le mode du paramètre
….. formel, qui est obligatoirement
[EXCEPTION] en entrée (IN)
….
RETURN (variable_résultat);
END; 15
Fonctions
Exemple
Ecrire une fonction « Calcul_liv » qui calcule le montant total
des livraisons d’une usine dont le nom est transmis en
paramètre.
Appel
Appel de Calcul_liv en mode interactif:
SQL> VAR montLiv NUMBER
SQL> EXECUTE :montLiv : =Calcul_liv (‘Delta’)
SQL> PRINT montLiv
Soit à partir d’un bloc PL/SQL en indiquant le nom de la
16
fonction suivi éventuellement des paramètres effectifs.
LES FONCTIONS : Suppression
17
LES PACKAGES : Introduction
Un package permet de définir et de stocker des
modules logiques de traitement dans une base
de données en regroupant des :
• procédures
• fonctions
• variables
• constantes
• curseurs
• traitements d’exception
qui ont un lien logique avec eux, sous une seule
entité. 18
LES PACKAGES
Un package est organisé en deux parties distinctes :
Partie spécification : permet de spécifier à la fois
des fonctions et des procédures publiques ainsi
que les déclarations des types, des variables, des
constantes, exceptions et curseur utilisés dans le
package et visibles de l’extérieur ;
Partie corps : contient les blocs et les
spécifications. Elle peut inclure des objets qui ne
sont pas listés dans la partie spécification et sont
privés.
Chaque partie du package doit être créée et 19
compilée séparément.
LES PACKAGES : création de la
partie « spécifications »
CREATE [OR REPLACE] PACKAGE NomPackage
[IS | AS]
{ [déclaration_de_procédures ; ]
| [déclaration_de_fonctions ; ]
| [déclaration_de_variables ; ]
| [déclaration_de_curseur ; ]
| [déclaration_des_exceptions ; ] …}
END NomPackage ;
20
PACKAGES : création de la partie «
corps ou body »
CREATE [OR REPLACE] PACKAGE BODY NomPackage
[IS | AS]
{ [déclaration_de_variables ; ]
| [Définition_fonctions ; ]
| [Définition_de_procédures ; ]
| [déclaration_de_curseur ; ]
| [déclaration_des_exceptions ; ] …}
END NomPackage ;
21
Exemple
VISIBILITE
25
Modification d’un package
26
Suppression d’un package
27
LES DECLENCHEURS
Introduction
29
Syntaxe
31
Tables en mutation
Il est impossible, dans un trigger de type FOR
EACH ROW de faire un SELECT sur la table en
cours de modification.
CREATE OR REPLACE TRIGGER trig_Exemple1
BEFORE UPDATE ON Produit
DECLARE
NB NUMBER;
BEGIN
SELECT COUNT(*) INTO NB
FROM Produit;
END;
/
SQL> UPDATE Produit SET Couleur = ‘Vert’; Mise à jour effectuée
32
Tables en mutation
CREATE OR REPLACE TRIGGER trig_Exemple2
BEFORE UPDATE ON Produit
FOR EACH ROW
DECLARE
NB NUMBER;
BEGIN
SELECT COUNT(*) INTO NB
FROM Produit;
END;
/
Mise à jour non effectuée
UPDATE Produit SET Couleur = ‘Bleu’;
Erreur: table en mutation
33
Exemples
Créer un trigger qui permet, à chaque mise à jour (ajout,
suppression ou modification) sur la table Fournisseur,
d’afficher le type de la mise à jour effectuée.
Créer un trigger qui permet, pour chaque modification ou
suppression dans la table usine, de garder dans une
table ‘ancienne_usine’ (qu’on suppose déjà créée) un
historique des lignes manipulées.
Créer un trigger qui permet de vérifier pour chaque
insertion d’une nouvelle livraison que la quantité en
stock du produit en question est suffisante pour faire la
livraison. Dans le cas contraire, afficher un message
d’erreur. 34
Activation/désactivation d’un trigger
ALTER TRIGGER NomTrigger
{ENABLE|DISABLE};
35