Más contenido relacionado La actualidad más candente (20) Similar a Alphorm.com Formation PL/SQL (20) Alphorm.com Formation PL/SQL1. Le langage PL/SQL
Présentation de la formation
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Le langage PL/SQL
Noureddine DRISSI
Expert consultant bases de
données
2. Plan
Le formateur
Mes formations sur Alphorm
Les objectifs de la formation
Le plan de formation
Publics concernés
Le langage PL/SQL alphorm.com™©
Publics concernés
Connaissances requises
Liens utiles
3. Le formateur
Noureddine DRISSI
Expertise dans le domaine des bases de données
15 années d’expérience sur tous les SGBDR du marché (SQL Server, Oracle,
Postgresql, Mysql, DB2, MongoDB, SQL, PL/SQL, Transact-SQL)
Issue de l’environnement bancaire
Le langage PL/SQL alphorm.com™©
contact@ordb.fr
4. Mes formations sur alphorm.com
MySQL, Administration
(1Z0-883)
Oracle Database 11g DBA 1
(1Z0-052)
Formation PostgreSQL,
La haute disponibilité
Le langage PL/SQL alphorm.com™©
(1Z0-883)
MongoDB,
administration
(1Z0-052)
Formation Administration
PostgreSQL
Administration SQL Server
2012 (70-462)
Le langage SQL
La haute disponibilité
6. Plan de cours
Module 1: Présentation du PL/SQL
Module 2: Les variables
Module 3: Accès à la base de données et ordres SQL
Module 4: Les structures de contrôle
Module 5: Les curseurs
Le langage PL/SQL alphorm.com™©
Module 5: Les curseurs
Module 6: Gestion des erreurs
Module 7: Les programmes stockés
Module 8: Les triggers
Module 9: Les packages
8. Connaissances requises
Connaissance du language SQL
Notions de programmation
Ressource :
Formation Le langage SQL sur Alphorm
• http://www.alphorm.com/formation/formation-langage-sql
Le langage PL/SQL alphorm.com™©
• http://www.alphorm.com/formation/formation-langage-sql
11. L’environnement
Présentation de la formation
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
L’environnement
Noureddine DRISSI
Expert consultant bases de
données
12. Objectifs
Configurer l’environnement de travail
Vérifier les pré-requis
Installer le SGBDR Oracle Database 11g Express Edition
Installer Oracle SQL Developer
Se connecter au moteur de base de données Oracle
Le langage PL/SQL alphorm.com™©
Se connecter au moteur de base de données Oracle
Créer le shéma facsys (facsysv2.sql)
13. Les pré-requis
Matériel
Mémoire
• Minimum :
- Éditions Express : 512 MO
Processeur
• Minimum :
Le langage PL/SQL alphorm.com™©
• Minimum :
- Processeur x86 : 1,0 GHz, Processeur x64 : 1,4 GHz
- Recommandé : 2,0 GHz ou plus
Disque
• Minimum :
- 5,0 GO disponible
14. Les pré-requis
Logiciels
OS
• Windows 8
SGBDR et outil
• Oracle Database 11g Express Edition
Le langage PL/SQL alphorm.com™©
• Oracle Database 11g Express Edition
http://www.oracle.com/technetwork/database/database-technologies/express-
edition/downloads/index.html
• Oracle SQL Developer
http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html
15. Le modèle de données (facsys)
Le langage PL/SQL alphorm.com™©
16. Atelier
Installation du SGBDR Oracle Database 11g Express Edition
Installation de Oracle SQL Developper
Connexion à la base de données
Création du schéma facsys et test de connexion
Le langage PL/SQL alphorm.com™©
18. Les outils de
Présentation du langage
PL/SQL
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les outils de
développement
Noureddine DRISSI
Expert consultant bases de
données
19. Objectifs
Utiliser Oracle SQL Developer pour développer en PL/SQL
Exécuter un programme PL/SQL à partir de sqlplus
Le langage PL/SQL alphorm.com™©
20. Oracle SQL Developer
Caractéristiques
Auto-formatage des instructions PL/SQL et SQL
Inclut un débogueur PL/SQL
Permet de naviger dans les objets de bases de données
Contient des modèles de code
Le langage PL/SQL alphorm.com™©
Contient des modèles de code
Permet l’exécution de scripts
22. Le langage PL/SQL
Présentation du langage
PL/SQL
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Le langage PL/SQL
Noureddine DRISSI
Expert consultant bases de
données
24. Le langage PL/SQL
PL/SQL = Procedural Language extensions to SQL
Langage procédural
Les variables
Les structures de contrôle et les boucles
Les procédures, les fonctions, les triggers et les packages
Le langage PL/SQL alphorm.com™©
Les procédures, les fonctions, les triggers et les packages
Langage structuré en blocs (ensemble d’instructions)
Externe (anonyme) ou stocké en base (procédure, fonctions ou triggers)
S’intègre dans les outils SQL*FORMS, SQL*PLUS, PRO*C, etc.
26. Structure d’un programme PL/SQL
Se décompose en trois parties
[DECLARE]
..........
..........
BEGIN
..........
La zone DECLARE sert à la déclaration des
variables, des constantes, ou des curseurs
La zone BEGIN constitue le corps du programme
La zone EXCEPTION permet de préciser les actions
Le langage PL/SQL alphorm.com™©
..........
..........
[EXCEPTION]
..........
..........
END ;
/
La zone EXCEPTION permet de préciser les actions
à entreprendre lorsque des erreurs sont rencontrées
(pas de référence article trouvée pour une insertion,
...).
Le END répond au BEGIN précédent, il marque la
fin du script.
Le / permet de terminer le bloc PL/SQL
27. DBMS_OUTPUT
Permet d’afficher une chaîne ou le contenu d’une variable
SET SERVEROUTPUT ON;
BEGIN
DBMS_OUTPUT.PUTLINE(<valeur>);
END ;
/
Le langage PL/SQL alphorm.com™©
/
28. Bloc PL/SQL: exercice 1 (sol_exercice1.txt)
Créez un bloc PL/SQL qui affiche le texte suivant
Créer un programme PL/SQL qui insère une nouvelle catégories (table
CATEGORIES) de produit avec les valeurs suivantes: CODE_CAT = 5 et
LIBELLE_CAT = "Composants"
Bonjour facys: vous êtes sur la plateforme Alphorm le <date_du_jour>
Le langage PL/SQL alphorm.com™©
29. Un peu plus loin dans l’utilisation de
PL/SQL
Le langage PL/SQL alphorm.com™©
PL/SQL
30. Un peu plus loin dans
Présentation du langage
PL/SQL
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Un peu plus loin dans
l’utilisation du PL/SQL
Noureddine DRISSI
Expert consultant bases de
données
31. Objectifs
Connaîtres les principales caractéristiques du PL/SQL
Connaître les directives de compilation d’un bloc PL/SQL
Connaître la notion de bloc imbriquée
Le langage PL/SQL alphorm.com™©
32. Rappel: structure d’un bloc PL/SQL
[DECLARE]
..........
..........
BEGIN
..........
..........
[EXCEPTION]
Le langage PL/SQL alphorm.com™©
[EXCEPTION]
..........
..........
END ;
/
33. Limites et fonctionnement
Contenu d’un bloc PL/SQL
LMD (langage de manipulation de données)
LDD (langage de définition des données) est interdit
Gestion des transactions
Identique à SQL
Le langage PL/SQL alphorm.com™©
Identique à SQL
34. Directive PRAGMA
Le mot clé PRAGMA
Instruction de compilation (non exécutable)
Les valeurs possibles
EXCEPTION_INIT
RESTRICT_REFERENCES
Le langage PL/SQL alphorm.com™©
RESTRICT_REFERENCES
SERIALLY_REUSABLE
AUTONOMOUS_TRANSACTION
38. Introduction aux variables
Les variables
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Introduction aux variables
PL/SQL
Noureddine DRISSI
Expert consultant bases de
données
41. Les types de données PL/SQL
Types scalaires
BINARY_INTEGER
INTEGER
NUMBER
POSITIVE/NATURAL
CHAR
LONG
VARCHAR ou VARCHAR2
BOOLEAN
RAW
LONG RAW
CLOB
BLOB
Types composés
RECORD
TABLE
Types
numériques
Types
caractères
Types RAW
Le langage PL/SQL alphorm.com™©
DECIMAL
FLOAT
INTEGER
REAL
SMALLLINT
BOOLEAN
DATE
ROWID
CLOB
UROWID
BFILE
Types dates
Types
ROWID
Types
booléens
Types LOB
42. Conversion de types de données
Les types de conversion
EXPLICITE
• Utilisent des fonctions comme TO_DATE, TO_CHAR, etc.
IMPLICITE
• Réalisées automatiquement par le moteur PL/SQL
Le langage PL/SQL alphorm.com™©
• Réalisées automatiquement par le moteur PL/SQL
- Evaluation d’expressions
- Affectation des variables
43. Conversion de types de données
Evaluation d’expressions
NUMBER
DATE
ROWID
Le langage PL/SQL alphorm.com™©
BINARY_INTEGER
CHAR
VARCHAR2
RAW
44. Conversion de types de données
Affectation de variables
NUMBER
DATE
ROWID
Le langage PL/SQL alphorm.com™©
BINARY_INTEGER
CHAR
VARCHAR2
RAW
47. Les variables de liaison
Les variables
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les variables de liaison
Noureddine DRISSI
Expert consultant bases de
données
49. Qu’est-ce qu’une variable de liaison ?
Permet de socker les entrées utilisateurs
De visualiser le contenu d’une variable à travers plusieurs exécution
successives de bloc PL/SQL
DECLARE
..........
BEGIN
variable ...
Le langage PL/SQL alphorm.com™©
BEGIN
:variable ...
..........
[EXCEPTION]
..........
..........
END ;
/
51. La portée des variables
Les variables
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
La portée des variables
Noureddine DRISSI
Expert consultant bases de
données
53. La portée des variables PL/SQL
Une variable est accessible dans le bloc dans lequel elle a été déclarée
et dans les blocs secondaires (imbriqués)
• Si le nom d’une variables déclarée dans le bloc principal est réutilisé
dans un bloc secondaire, c’est une nouvelle variable qui est créée
Le langage PL/SQL alphorm.com™©
55. Les autres types de
données PL/SQL
Les variables
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les autres types de
données PL/SQL
Noureddine DRISSI
Expert consultant bases de
données
56. Objectifs
Connaître les autres types de données PL/SQL
Types définis par les utilisateurs
Types composés
• Les enregistrements ou structure
• Les tableaux
Le langage PL/SQL alphorm.com™©
• Les tableaux
Les variables basées
Créer et utiliser les autres types de données
57. Les types définis par les utilisateurs
Deux types dérivés possibles:
Les types bornés
Les types non bornés (alias ou synonym d’un type de base)
Syntaxe
Le langage PL/SQL alphorm.com™©
Syntaxe
SUBTYPE <nom_type> IS TYPE [ (CONSTRAINT) ] [NOT NULL]
58. Les structures
Une structure c’est quoi ?
Type composé
Permet de stocker des données structurées = enregistrement
Syntaxe de déclaration
Le langage PL/SQL alphorm.com™©
Syntaxe de déclaration
TYPE <nom_type_structure> IS RECORD (<nom_champ1> TYPE [NOT
NULL] [:=EXPRESSION1], [, . . . ] );
Syntaxe d’utilisation
<nom_enregistrement> <nom_type_structure>
59. Les tableaux (type composé TABLE)
Les tableaux associatifs
Syntaxe de déclaration
TYPE <nom_type_tableau> IS TABLE OF <type_valeur> [NOT NULL] INDEX
BY { PLS_INTEGER | BINARY_INTEGER | VARCHAR2(TAILLE) };
Syntaxe d’utilisation
Le langage PL/SQL alphorm.com™©
Syntaxe d’utilisation
<nom_variable> <nom_type_tableau>
60. Les tableaux (type composé TABLE)
Les tableaux pré-dimensionnés
Syntaxe de déclaration
TYPE <nom_type_tableau> IS VARRAY(TAILLE) OF <type_valeur> [NOT
NULL];
Syntaxe d’utilisation
Le langage PL/SQL alphorm.com™©
Syntaxe d’utilisation
<nom_variable> <nom_type_tableau>
61. Les tableaux (type composé TABLE)
Les actions possibles sur un tableau en PL/SQL
EXISTS(n)
COUNT
FIRST et LAST
PRIOR et NEXT (n)
Le langage PL/SQL alphorm.com™©
PRIOR et NEXT (n)
TRIM (n)
DELETE (n)
62. Les variables basées
Attribut %TYPE
Permet de référencer: une colonne d’une table ou une variable déjà définie
Syntaxe de déclaration
<nom_variable> {<nom_table.colonne | <nom_variable>}%TYPE;
Le langage PL/SQL alphorm.com™©
Attribut %ROWTYPE
Permet à la variable d’hériter des caractéristiques d’une ligne de table
Syntaxe de déclaration
<nom_variable> {<nom_table> | <nom_variable>}%ROWTYPE;
64. Le SELECT dans un bloc
PL/SQL
Les variables
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Le SELECT dans un bloc
PL/SQL
Noureddine DRISSI
Expert consultant bases de
données
66. Le SELECT INTO
Syntaxe
SELECT EXPRESSION1 [ , . . . ] INTO VARIABLE1 [ , . . . ] FROM TABLE
<nom_table> [ WHERE PREDICAT ] ;
Le langage PL/SQL alphorm.com™©
69. Les ordres INSERT,
UPDATE et DELETE
Accès à la base de
données et ordres SQL
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les ordres INSERT,
UPDATE et DELETE
Noureddine DRISSI
Expert consultant bases de
données
75. Attributs des ordres
Accès à la base de
données et ordres SQL
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Attributs des ordres
INSERT, UPDATE et DELETE
Noureddine DRISSI
Expert consultant bases de
données
77. Les différents attributs
SQL%FOUND
Type BOOLEAN
• Renvoie TRUE si la précédente exécution (INSERT, UPDATE ou DELETE) a
modifiéé des enregistrements
SQL%NOTFOUND
Le langage PL/SQL alphorm.com™©
SQL%NOTFOUND
Type BOOLEAN
• Renvoie TRUE si la précédente exécution (INSERT, UPDATE ou DELETE)
n’a modifiéé aucun enregistrement
SQL%ROWCOUNT
Renvoie le nombre de ligne modifiés par la précédente exécution
78. Clause SQL RETURNING
Fonction
Permet de renvoyer les valeurs de champs des enregistrements affectés par
les ordres INSERT, UPDATE ou DELETE
Limites
Inutilisable avec un ordre INSERT qui insère plusieurs enregistrement à partir
Le langage PL/SQL alphorm.com™©
Inutilisable avec un ordre INSERT qui insère plusieurs enregistrement à partir
d’une sous-requête
Impossible d’utiliser « * » pour retourner l’ensemble des champs insérées
dans l’enregistrement
79. Récapitulatif sur le LMD avec le
langage PL/SQL et exercices
Le langage PL/SQL alphorm.com™©
langage PL/SQL et exercices
80. Récapitulatif sur le LMD
Accès à la base de
données et ordres SQL
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Récapitulatif sur le LMD
avec le langage PL/SQL et
exercices
Noureddine DRISSI
Expert consultant bases de
données
82. Ce que nous avons étudiés
SELECT INTO
BULK COLLECT INTO
Insert, update et delete dans un programme PL/SQL
Les attributs SQL%FOUND, SQL%NOTFOUND et SQL%ROWCOUNT
Le langage PL/SQL alphorm.com™©
La clause RETURNING
83. Le LMD dans PL/SQL: exercice 4 (sol_exercice4.txt)
Créez le bloc PL/SQL qui permet d’effectuer les opérations suivantes:
Affichez le nom, la fonction, le salaire et la commission du salarié dont la
fonction est « Directeur »
Affichez le nom, la fonction, le salaire et la comission de tous les salariés
Mettez à jour la commission du salarié « Orlando » ( comission = 5000) et
affichez la nouvelle valeur inserée
Le langage PL/SQL alphorm.com™©
Mettez à jour la commission du salarié « Orlando » ( comission = 5000) et
affichez la nouvelle valeur inserée
Inserez une nouvele categorie (code_cat=77 et libelle_cat= ‘Outillage’ ) puis
affichez les valeurs inserées pour la colonne code_cat et libelle_cat
85. Traitements conditionnels
Les structures de contrôles
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Traitements conditionnels
Noureddine DRISSI
Expert consultant bases de
données
87. IF THEN ELSIF ELSE
Syntaxe
IF <condition_plsql> THEN <sequence_de_commandes>
[ ELSEIF <condition_plsql> THEN <sequence_de_commandes>
[ ELSEIF <condition_plsql> THEN <sequence_de_commandes>
[ ELSE <sequence_de_commandes> ]
Le langage PL/SQL alphorm.com™©
[ ELSE <sequence_de_commandes> ]
END IF;
88. Instruction CASE
Case simple
Syntaxe
CASE <expression>
WHEN <valeur> THEN <sequence_de_commandes>
[ ELSE <sequence_de_commandes> ]
Le langage PL/SQL alphorm.com™©
[ ELSE <sequence_de_commandes> ]
END CASE;
89. Instruction CASE
Case avec recherche
Syntaxe
CASE
WHEN <condition_plsql> THEN <sequence_de_commandes>
[ ELSE <sequence_de_commandes> ]
Le langage PL/SQL alphorm.com™©
[ ELSE <sequence_de_commandes> ]
END CASE;
91. Traitements itératifs
Les structures de contrôles
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Traitements itératifs
Noureddine DRISSI
Expert consultant bases de
données
93. L’instruction LOOP
Permet de répéter une séquence de commandes
Syntaxe
[ <<nom_boucle>> ]
LOOP
<commandes_plsql>;
Le langage PL/SQL alphorm.com™©
<commandes_plsql>;
EXIT [ <nom_boucle> ] | EXIT WHEN <condition>;
END LOOP;
94. L’instruction WHILE
Permet de répéter une séquence de commandes tant que la condition
reste vraie
Syntaxe
[ <<nom_boucle>> ]
WHILE <condition> LOOP
Le langage PL/SQL alphorm.com™©
WHILE <condition> LOOP
<commandes_plsql>;
END LOOP [ <nom_boucle> ];
95. L’instruction FOR
Permet de répéter une séquence de commandes une fois pour chaque
élément dans l’intervalle délimité par deux expressions
Syntaxe
[ <<nom_boucle>> ]
FOR <indice> IN [ REVERSE ] <borne_inférieure> . . <borne_supérieure>LOOP
Le langage PL/SQL alphorm.com™©
FOR <indice> IN [ REVERSE ] <borne_inférieure> . . <borne_supérieure>LOOP
<commandes_plsql>;
END LOOP [ <nom_boucle> ];
96. Récapitulatif sur les instructions de
contrôle et exercices
Le langage PL/SQL alphorm.com™©
contrôle et exercices
97. Récapitulatif sur les
Les structures de contrôles
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Récapitulatif sur les
instructions de contrôle et
exercices
Noureddine DRISSI
Expert consultant bases de
données
99. Ce que nous avons étudiés
IF THEN ELSIF ELSE
L’instruction CASE
La boucle LOOP
La boucle WHILE
Le langage PL/SQL alphorm.com™©
La boucle FOR
100. Instructions de contrôle: exercice 5 (sol_exercice5.txt)
Créez le bloc PL/SQL qui permet d’effectuer les opérations suivantes:
Simuler une augmentation de salaire des salariés de 10% si leur salaire est
inférieur à la moyenne des salaires
Affichez la liste de tous les articles en utilisant la boucle WHILE et la boucle
FOR
Le langage PL/SQL alphorm.com™©
102. Introduction au curseur
Les curseurs
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Introduction au curseur
Noureddine DRISSI
Expert consultant bases de
données
103. Objectifs
Connaître le rôle d’un curseur
Connaître les types de curseurs
Savoir comment fonctionne un curseur
Le langage PL/SQL alphorm.com™©
104. Un curseur c’est quoi ?
Permet de manipuler les données ligne par ligne
Permet de contrôler le traitement PL/SQL
Le langage PL/SQL alphorm.com™©
105. Un curseur c’est quoi ?
Permet de manipuler les données ligne par ligne
Fonctionnement
Créer une zone de contexte pour exécuter la commande et stocker les
informations
Le curseur permet de nommer cette zone de contexte, d’accéder aux
Le langage PL/SQL alphorm.com™©
Le curseur permet de nommer cette zone de contexte, d’accéder aux
informations et éventuellement de contrôler le traitement PL/SQL
106. Les types de curseurs
Curseurs explicites
Pour traiter les requêtes multilignes
Curseurs implicites
Utilisés pour les autres commandes SQL (lorsqu’une requête ne ramène
qu’une ligne)
Le langage PL/SQL alphorm.com™©
qu’une ligne)
107. Utilisation d’un curseur
Les étapes de la vie d’un curseur
DECLARATION (DECLARE)
OUVERTURE (OPEN)
DEFILEMENT DES DONNEES (FETCH)
FERMETURE (CLOSE)
Le langage PL/SQL alphorm.com™©
FERMETURE (CLOSE)
109. Déclaration, ouverture,
Les curseurs
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Déclaration, ouverture,
traitement des lignes et
fermeture d’un curseur
Noureddine DRISSI
Expert consultant bases de
données
111. Déclaration
Consite à nommer un curseur et à lui associer une requête
Syntaxe
CURSOR <nom_curseur> [ ( <nom_parametre> TYPE [ , . . . ] IS
<requête_SQL>;
Le langage PL/SQL alphorm.com™©
112. Ouverture
Dès que le curseur est ouvert l’ordre SQL est exécuté
Syntaxe
OPEN <nom_curseur> [ ( <parametre_entrée [ , . . . ] ) ];
Le langage PL/SQL alphorm.com™©
113. Traitement des lignes
Pour trouver la ligne suivante dans l’ensemble actif de données, on doit
défiler le curseur par la commande FETCH
Syntaxe
FETCH <nom_curseur> { INTO { <nom_variable> | <nom_enregistrement> [ , . .
. ] } | BULK COLLECT INTO <variable_enregistrement> };
Le langage PL/SQL alphorm.com™©
115. Ouverture et fermeture
Les curseurs
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Ouverture et fermeture
d’un curseur
Noureddine DRISSI
Expert consultant bases de
données
117. Ouverture
Dès que le curseur est ouvert l’ordre SQL est exécuté
Syntaxe
OPEN <nom_curseur> [ ( <parametre_entrée> [ , . . . ] ) ];
Le langage PL/SQL alphorm.com™©
120. Traitement des lignes d’un
Les curseurs
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Traitement des lignes d’un
curseur
Noureddine DRISSI
Expert consultant bases de
données
122. Traitement des lignes
Pour trouver la ligne suivante dans l’ensemble actif de données, on doit
défiler le curseur par la commande FETCH
Syntaxe
FETCH <nom_curseur> { INTO { <nom_variable> | <nom_enregistrement> [ , . .
. ] } | BULK COLLECT INTO <variable_enregistrement> };
Le langage PL/SQL alphorm.com™©
124. Etat d’un curseur
Les curseurs
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Etat d’un curseur
Noureddine DRISSI
Expert consultant bases de
données
126. Etat d’un curseur
Les attributs des curseurs explicites:
%FOUND
%NOTFOUND
%ISOPEN
%ROWCOUNT
Le langage PL/SQL alphorm.com™©
%ROWCOUNT
127. Mise à jour des lignes d’un curseur
Le langage PL/SQL alphorm.com™©
128. Mise à jour des lignes d’un
Les curseurs
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Mise à jour des lignes d’un
curseur
Noureddine DRISSI
Expert consultant bases de
données
130. Curseurs FOR UPDATE
Option FOR UPDATE
Permet de verrouiller les enregistrements d’un curseur pour modification
Syntaxe
CURSOR <nom_curseur> [ ( <nom_parametre> TYPE := <valeur_par_default> [
, . . . ] ) ] IS <requête_SQL> FOR UPDATE [ OF <nom_colonne> [ , . . . ] ] [ {
Le langage PL/SQL alphorm.com™©
, . . . ] ) ] IS <requête_SQL> FOR UPDATE [ OF <nom_colonne> [ , . . . ] ] [ {
NOWAIT | WAIT <nombre_de_secondes> } ];
132. Utilisation des curseurs
Les curseurs
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Utilisation des curseurs
avec une boucle
Noureddine DRISSI
Expert consultant bases de
données
134. Utilisation d’un curseur avec une boucle
Syntaxe
FOR <nom_enregistrement> IN <nom_curseur> LOOP <commandes_plsql>;
END LOOP;
Le langage PL/SQL alphorm.com™©
136. Récapitulatif sur les
Les curseurs
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Récapitulatif sur les
curseurs et exercices
Noureddine DRISSI
Expert consultant bases de
données
138. Ce que nous avons étudiés
DECLARATION (CURSOR) des curseurs
OUVERTURE (OPEN) et FERMETURE (CLOSE) des CURSEURS
TRAITEMENT DES LIGNES (FETCH) des curseurs
Les attributs de statut des curseurs (%FOUND, %NOTFOUND, %ISOPEN
et %ROWCOUNT)
Le langage PL/SQL alphorm.com™©
et %ROWCOUNT)
La mise à jour des lignes d’un curseur (FOR UPDATE)
Les curseurs et la variante de la boucle FOR
139. Les curseurs: exercice 6 (sol_exercice6.txt)
Créez un bloc PL/SQL qui permet d’afficher toutes les commandes de la
table « commandes » à l’aide d’un curseur utilisant la boucle FOR.
Créez un bloc PL/SQL qui permet d’afficher le nombre de commandes
par client. Le pays de résidence du client sera passé en paramètre
(argument) au curseur avec une valeur par défaut. Utilisez la boucle FOR
avec votre curseur.
Le langage PL/SQL alphorm.com™©
avec votre curseur.
Créez un bloc PL/SQL qui permet de mettre à jour (à l’aide d’un curseur)
la date d’envoi des commandes à la date du jour et l’état de la
commande à « TRAITEE » pour les commandes dont la date d’envoi est
nul.
141. Les types d’exceptions
Les exceptions
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les types d’exceptions
Noureddine DRISSI
Expert consultant bases de
données
143. Les quatre types d’exception
Les exceptions systèmes nommées
Un nom est attribué aux exceptions par Oracle
Déclenchées à la suite d’une erreur PL/SQL ou Oracle
Les exceptions utilisateurs nommées
Nommées lors de leur déclaration par le développeur
Le langage PL/SQL alphorm.com™©
Nommées lors de leur déclaration par le développeur
Déclenchées à la suite d’erreurs dans le code applicatif
Les exceptions système anonymes
Non nommées
Déclenchées à la suite d’une erreur PL/SQL mais non nommées
144. Les quatre types d’exception
Les exceptions utilisateur anonymes
Définies et déclenchées par le développeur
Code compris entre - 20 000 et – 20 999
Le langage PL/SQL alphorm.com™©
146. Création d’une exception
Les exceptions
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Création d’une exception
dans un bloc PL/SQL
Noureddine DRISSI
Expert consultant bases de
données
148. Création d’une exception
Syntaxe
DECLARE
. . .
BEGIN
. . .
EXCEPTION
Le langage PL/SQL alphorm.com™©
WHEN <nom_exception> [ OR <nom_exception> . . . ]
THEN <instructions_plsql>;
. . .
[ WHEN OTHERS THEN <instructions_plsql> ; ]
END;
149. Les exceptions prédéfinies
Se trouve dans le package STANDARD de PL/SQL
Quelques exceptions prédéfinies
• NO_DATA_FOUND (ORA-01403 SQLCODE= +100)
• CURSOR_ALREADY_OPEN (ORA-6511 SQLCODE= -6511)
• ZERO_DIVIDE (ORA-01476 SQLCODE = -1476)
Le langage PL/SQL alphorm.com™©
• ZERO_DIVIDE (ORA-01476 SQLCODE = -1476)
• CASE _NOT_FOUND (ORA-6592 SQLCODE = -6592)
• . . .
151. Les exceptions anonymes
Les exceptions
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les exceptions anonymes
Noureddine DRISSI
Expert consultant bases de
données
153. Les fonctions SQLCODE et SQLERRM
SQLCODE
Permet de retrouver le code des exceptions Oracle
SQLERRM
Permet de retrouver le message des exceptions Oracle
Le langage PL/SQL alphorm.com™©
154. PRAGMA EXCEPTION_INIT
Fonction
Permet d’associer une exception utilisateur à un code d’erreur Oracle
Syntaxe d’utilisation
DECLARE
<nom_exception> EXCEPTION;
Le langage PL/SQL alphorm.com™©
<nom_exception> EXCEPTION;
PRAGMA EXCEPTION_INIT (<nom_exception>, <code_erreur_oracle>);
BEGIN
. . .
EXCEPTION
WHEN <nom_exception> THEN
<instructions_plsql>;
END;
156. Les exceptions utilisateurs
Les exceptions
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les exceptions utilisateurs
Noureddine DRISSI
Expert consultant bases de
données
158. Rôle des exceptions utilisateur
Permettent de gérer les erreurs applicatives
Le langage PL/SQL alphorm.com™©
161. La portée des exceptions
Quitte le bloc dans lequel il est déclenchée et recherche une exception
dans les blocs supérieurs
Le langage PL/SQL alphorm.com™©
163. Récapitulatif sur les
Les exceptions
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Récapitulatif sur les
exceptions et exercices
Noureddine DRISSI
Expert consultant bases de
données
165. Ce que nous avons étudiés
Les types d’exceptions
La création et le déclenchement d’une exception dans un bloc PL/SQL
Les exceptions anonymes
Les exceptions utilisateurs
Le langage PL/SQL alphorm.com™©
166. Les exceptions: exercice 7 (sol_exercice7.txt)
Créez un bloc PL/SQL qui permet de modifier la comission d’un salarié
et qui déclenche une exception si la comission est supérieur au salaire
Créez un bloc PL/SQL qui permet de déclencher une exception « ORA-
0292: violation de contrainte (.) d’intégrité ... » lorsque l’on essaye de
supprimer un salarié qui a traité des commandes
Le langage PL/SQL alphorm.com™©
168. Les procédures stockées
Les programmes stockés
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les procédures stockées
Noureddine DRISSI
Expert consultant bases de
données
170. Qu’est-ce qu’une procédure stockée ?
Un sous-programme
Stokée dans la base de données sous format compilé
Effectue un traitement
Peut recevoir des arguments
Le langage PL/SQL alphorm.com™©
171. Création d’une procédure stockée
Syntaxe
[ CREATE [ OR REPLACE ] ] PROCEDURE <nom_procedure> [ (
<nom_argument> [ { IN | OUT | IN OUT } ] TYPE [ , . . . ] ) ]
{ IS | AS }
BEGIN
Le langage PL/SQL alphorm.com™©
BEGIN
. . .
EXCEPTION <nom_exception> THEN <instructions>;
END [ <nom_procedure> ];
175. Les fonctions
Les programmes stockés
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les fonctions
Noureddine DRISSI
Expert consultant bases de
données
177. Qu’est-ce qu’une fonction ?
Identique à une procédure à la différence qu'elle retourne une valeur
Stokée dans la base de données sous format compilé
Peut recevoir des arguments (paramètres)
Le langage PL/SQL alphorm.com™©
178. Création d’une fonction
Syntaxe
[ CREATE [ OR REPLACE ] ] FONCTION <nom_fonction> [ ( <nom_argument> [
{ IN | OUT | IN OUT } ] TYPE [ , . . . ] ) ] RETURN <type_valeur>
{ IS | AS }
BEGIN
Le langage PL/SQL alphorm.com™©
BEGIN
. . .
RETURN EXPRESSION;
EXCEPTION <nom_exception> THEN <instructions>;
END [ <nom_fonction> ];
179. Appel d’une fonction
Syntaxes
En PL/SQL
BEGIN
<nom_variable> := <nom_fonction>[ (<argument1>, . . . ] ) ] ;
END;
Le langage PL/SQL alphorm.com™©
END;
En SQL
SELECT <nom_fonction>[ (<argument1>, . . . ] ) ] ;
182. Les arguments
Les programmes stockés
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les arguments
Noureddine DRISSI
Expert consultant bases de
données
184. Déclaration des arguments
Syntaxe
<nom_argument> [ { IN | OUT | IN OUT } ] [ NOCOPY ] TYPE [ , . . . ]
IN indique que le paramètre transmis par le programme appelant n'est pas modifiable par la
fonction
OUT indique que le paramètre est modifiable par la procédure
IN OUT indique que le paramètre est transmis par le programme appelant et renseigné par la
Le langage PL/SQL alphorm.com™©
IN OUT indique que le paramètre est transmis par le programme appelant et renseigné par la
fonction
NOCOPY indique que le paramètre est transmis par référence (pointeur) et non par copie de la
valeur
TYPE représente le type SQL ou PL/SQL du paramètre
:= représente le symbole d'assignation d'une valeur par défaut
DEFAULT identique à :=
186. Maintenance des
Les programmes stockés
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Maintenance des
programmes stockés
Noureddine DRISSI
Expert consultant bases de
données
189. Les meta-données
Les vues
USER_SOURCE pour les objets appartenant au schéma
ALL_SOURCE pour les objets appartenant aux schémas accessibles
DBA_SOURCE pour les objets appartenant à tous les schémas
Le langage PL/SQL alphorm.com™©
190. Récapitulatif sur les programmes
stockés et exercices
Le langage PL/SQL alphorm.com™©
stockés et exercices
191. Récapitulatif sur les
Les programmes stockés
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Récapitulatif sur les
programmes stockés et
exercices
Noureddine DRISSI
Expert consultant bases de
données
193. Ce que nous avons étudiés
Les procédures stockés avec et sans argument
Les fonctions avec et sans arguments
Les fonctions renvoyant une valeur scalaire
Les fonctions renvoyant une table
Les arguments avec le mode d’affection (IN, OUT, IN OUT, NOCOPY)
Le langage PL/SQL alphorm.com™©
Les arguments avec le mode d’affection (IN, OUT, IN OUT, NOCOPY)
194. Les programmes stockés: exercice 8 (sol_exercice8.txt)
Créez une procédure stockée nommée « updatequantite » qui met à
jour la quantité en stock d’un article. La référence de l’article et la
quantité seront passés en paramètres (arguments) à la procédure
stockée.
Créez une fonction nommée « valeurstock » qui retourne la valeur des
articles en stock.
Le langage PL/SQL alphorm.com™©
articles en stock.
Créez une fonction nommée « articleparcategorie » non stockée en
base qui retourne le nombre d’article par catégorie pour toutes les
catégories et qui les affichent.
196. Introduction aux packages
Les packages
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Introduction aux packages
Noureddine DRISSI
Expert consultant bases de
données
198. Qu’est-ce qu’un package ?
Un regroupement de procédures ou de fonctions
Contient deux sections
Une section de déclaration
Une section de traitement
Le langage PL/SQL alphorm.com™©
199. Les avantages de l’utilisation d’un package
Protection des données
Amélioration des performances
Persistance des objets
Le langage PL/SQL alphorm.com™©
200. PACKAGE
Structure d’un package
Déclaration:
PROCEDURES / FONCTIONS
VARIABLES / TYPE VARIABLE
CURSEURS
Spécification
de package
Eléments
publics
Le langage PL/SQL alphorm.com™©
Corps de
package
PROCEDURE
BEGIN
. . .
END;
FONCTION
BEGIN
. . .
END;
VARIABLES
CURSEURS
Eléments
privés
201. Syntaxe de création d’un package
CREATE [ OR REPLACE ] PACKAGE <nom_package>
{ IS | AS }
[ Déclaration des variables et des types ]
[ Déclaration des curseurs ]
Le langage PL/SQL alphorm.com™©
[ Déclaration des procédures et des fonctions ]
END <nom_package>;
202. Syntaxe de création d’un corps de package
CREATE [ OR REPLACE ] PACKAGE BODY <nom_package>
{ IS | AS }
[ Déclaration des variables et des types ]
[ Déclaration des curseurs ]
[ Déclaration des procédures et des fonctions ]
Le langage PL/SQL alphorm.com™©
[ Déclaration des procédures et des fonctions ]
[ BEGIN
<instructions_plsql>;
[ EXCEPTIONS
<gestion_exception>
END <nom_package>;
204. Utilisation des curseurs
Les packages
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Utilisation des curseurs
dans les packages
Noureddine DRISSI
Expert consultant bases de
données
206. Spécification du curseur
Obligation d’utiliser la clause RETURN avec le curseur associé
Un enregistrement %ROWTYPE
Un enregistrement défini par l’utilisateur
Le langage PL/SQL alphorm.com™©
208. Maintenance des
Les packages
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Maintenance des
packages
Noureddine DRISSI
Expert consultant bases de
données
210. Syntaxe de modification d’un package
ALTER PACKAGE <nom_package> COMPILE [ PACKAGE | BODY ] ;
Le langage PL/SQL alphorm.com™©
211. Syntaxe de suppression d’un package
DROP [ PACKAGE | BODY ] <nom_package> ;
Le langage PL/SQL alphorm.com™©
213. Récapitulatif sur les
Les packages
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Récapitulatif sur les
packages et exercices
Noureddine DRISSI
Expert consultant bases de
données
215. Ce que nous avons étudiés
Ce qu’est un package
La structure d’un package
Spécification de package
Corps de package
Utilisation des fonctions, procédures et des curseurs dans un package
Le langage PL/SQL alphorm.com™©
Utilisation des fonctions, procédures et des curseurs dans un package
Utiliser les objets d’un package
Maintenir un package
216. Les packages: exercice 9 (sol_exercice9.txt)
Créez un package nommé gestEmp avec les objets suivants:
Un fonction qui contrôle l’existence d’un salarié à partir de son numéro.
Une procédure qui permet de supprimer un salarié à partir de son numéro.
Une procédure qui permet d’augmenter le salaire d’un salarié. La procédure
doit reçevoir deux arguments: le premier est le numéro du salarié, le
deuxième le pourcentage d’augmention).
Le langage PL/SQL alphorm.com™©
doit reçevoir deux arguments: le premier est le numéro du salarié, le
deuxième le pourcentage d’augmention).
Une procédure qui affiche tous les salariés dont le salaire est supérieur à la
moyenne des salaires (cette procédure devra s’appuyer sur un curseur
nommé « cur_sal »)
218. Introduction
Les déclencheurs
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Introduction
Noureddine DRISSI
Expert consultant bases de
données
220. Un déclencheur c’est quoi ?
Définit une action qui doit se déclencher lorsqu’un évènement survient
sur la base de données
Objet stocké en base
Associé à une table ou à une vue
Pas de COMMIT/ROLLBACK dans un déclencheur
Le langage PL/SQL alphorm.com™©
Pas de COMMIT/ROLLBACK dans un déclencheur
221. Avantage du déclencheur
Ajouter des contraintes sur les valeurs des colonnes d’une table
Réaliser un audit des changements sur les données (logs)
Ajout des règles de gestion
Publier des informations concernant divers évènements
Le langage PL/SQL alphorm.com™©
222. Les niveaux d’exécutions
De niveau table (STATEMENT)
Exécuté une seule fois quelque soit le nombre de ligne modifié
De niveau enregistrement (ROW)
Exécuté séparément pour chaque ligne modifiée
FOR EACH ROW
Le langage PL/SQL alphorm.com™©
FOR EACH ROW
223. Les types de déclencheurs ?
Les déclencheurs LMD
Avant ou après
INSERT, UPDATE ou DELETE
Les déclencheurs INSTEAD OF
De niveau ligne seulement
Le langage PL/SQL alphorm.com™©
De niveau ligne seulement
S’exécute à la place de l’instruction qui a déclenché le trigger
Les déclencheurs SYSTEME
Démarrage ou arrêt d’une base
A la création, suppression ou modification d’un objet (DDL)
A la connexion ou déconnexion d’un utilisateur
224. Syntaxe de création
CREATE [ OR REPLACE ] TRIGGER <nom_trigger>
{ BEFORE | AFTER | INSTEAD OF } <nom_evenement1> [ <nomevenement2> ]
[ CLAUSE_REFERENCING] [ WHEN CONDITION ] [ FOR EACH ROW ]
[ DECLARE . . . ]
BEGIN
Le langage PL/SQL alphorm.com™©
. . .
[ EXCEPTION . . . ]
END [ <nom_trigger> ] ;
226. Les déclencheurs LMD
Les déclencheurs
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les déclencheurs LMD
Noureddine DRISSI
Expert consultant bases de
données
228. Rappel: syntaxe de création
CREATE [ OR REPLACE ] TRIGGER <nom_trigger>
{ BEFORE | AFTER | INSTEAD OF } <nom_evenement1> [ OR
<nomevenement2> ]
[ CLAUSE_REFERENCING] [ WHEN CONDITION ] [ FOR EACH ROW ]
[ DECLARE . . . ]
Le langage PL/SQL alphorm.com™©
BEGIN
. . .
[ EXCEPTION . . . ]
END [ <nom_trigger> ] ;
229. Déclenchement
Ce qui déclenche le déclencheur
INSERT
AVANT ou APRES insertion
UPDATE
Le langage PL/SQL alphorm.com™©
AVANT ou APRES mise à jour
Possibilité UPDATE TO <champ1> [ , <champN> ]
DELETE
AVANT ou APRES suppression
231. Nombre de trigger par table
Possibilité de créer un nombre illimité de déclencheurs
Possibilité de définir plusieurs déclencheurs d’un même type
Exécution séquentielle des déclencheurs s’il en existe plusieurs
Le langage PL/SQL alphorm.com™©
233. Le niveau d’exécution
Les déclencheurs
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Le niveau d’exécution
Noureddine DRISSI
Expert consultant bases de
données
235. Rappel: syntaxe de création
CREATE [ OR REPLACE ] TRIGGER <nom_trigger>
{ BEFORE | AFTER | INSTEAD OF } <nom_evenement1> [ <nomevenement2> ]
[ CLAUSE_REFERENCING] [ WHEN CONDITION ] [ FOR EACH ROW ]
[ DECLARE . . . ]
BEGIN
Le langage PL/SQL alphorm.com™©
BEGIN
. . .
[ EXCEPTION . . . ]
END [ <nom_trigger> ] ;
236. Niveaux d’exécution
De niveau table (STATEMENT)
Exécuté une seule fois quelque soit le nombre de ligne modifié
De niveau enregistrement (ROW)
Exécuté séparément pour chaque ligne modifiée
FOR EACH ROW
Le langage PL/SQL alphorm.com™©
FOR EACH ROW
238. Accès aux valeurs via :OLD
Les déclencheurs
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Accès aux valeurs via :OLD
et :NEW
Noureddine DRISSI
Expert consultant bases de
données
240. Valeur des attributs
Possibilité d’accéder à la valeur des attributs avant et après modification
:OLD.nom_attribut (permet d’accéder à la valeur avant
modification)
:NEW.nom_attribut (permet d’accéder à la valeur après
modification)
Le langage PL/SQL alphorm.com™©
241. Précisions
INSERT
Pas d’accès à l’élément OLD (n’existe pas)
UPDATE
Accès possible à l’élément OLD et NEW
Le langage PL/SQL alphorm.com™©
DELETE
Pas d’accès à l’élément NEW (n’existe plus)
Utilisable uniquement avec un déclencheur de niveau enregistrement
242. La clause REFERENCING
Fonction
Permet de créer un alias pour « :OLD » et « :NEW »
SYNTAXE
REFERENCING [ OLD AS <nom_ancien> ] [ NEW AS <nom_nouveau> ]
Le langage PL/SQL alphorm.com™©
244. Déclenchement
Les déclencheurs
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Déclenchement
conditionnel et les prédicats
Noureddine DRISSI
Expert consultant bases de
données
246. Clause WHEN
Ne s’applique qu’aux déclencheurs de niveau enregistrement
Syntaxe
WHEN <condition>
Le langage PL/SQL alphorm.com™©
247. Les fonctions prédicats
INSERTING
Retourne TRUE si l’instruction LMD est un INSERT
UPDATING
Retourne TRUE si l’instruction LMD est un UPDATE
Le langage PL/SQL alphorm.com™©
DELETING
Retourne TRUE si l’instruction LMD est un DELETE
249. Complément sur les
Les déclencheurs
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Complément sur les
déclencheurs
Noureddine DRISSI
Expert consultant bases de
données
250. Objectifs
Connaître l’utilisation des déclencheurs INSTEAD OF
Utilisation de l’ordre PRAGMA AUTONOMOUS_TRANSACTION
Réaliser les tâches d’exploitation des déclencheurs
Le langage PL/SQL alphorm.com™©
251. Les déclencheurs INSTEAD OF
Définis uniquement sur des objets vues
S’exécute à la place de l’ordre LMD qui a déclenché le déclencheur
Le langage PL/SQL alphorm.com™©
252. Transaction autonome
Les déclencheurs de niveau ligne, ne peuvent pas lire ou modifier la
table (table en mutation) sur laquelle porte le déclencheur
Les déclencheurs de niveau table peuvent lire et modifier la table sur
laquelle porte le déclencheur
Possibilité d’utiliser la directive PRAGMA
AUTONOMOUS_TRANSACTION
Le langage PL/SQL alphorm.com™©
AUTONOMOUS_TRANSACTION
Possibilité d’utiliser les commandes « COMMIT » et « ROLLBACK »
253. Autres caractéristiques
Triggers en cascade
Un trigger peut provoquer le déclenchement d'un autre trigger.
ORACLE autorise jusqu'à 32 triggers en cascade à un moment donné.
Limite
Un trigger ligne ne peut pas lire et/ou modifier la table concernée (appelée
Le langage PL/SQL alphorm.com™©
Un trigger ligne ne peut pas lire et/ou modifier la table concernée (appelée
table mutante) par l'instruction (INSERT, UPDATE ou DELETE) qui a déclenché
le trigger.
254. Création de déclencheurs
Conditions nécessaires pour créer un trigger
Privilège CREATE TRIGGER
Posséder (ou privilege ALTER, ALTER ANY) la table sur laquelle on veut définir
le déclencheur
Modification de triggers
Le langage PL/SQL alphorm.com™©
Modification de triggers
CREATE TRIGGER suivie de OR REPLACE ou bien on supprime le trigger
(DROP TRIGGER nomtrigger) et on le crée à nouveau.
255. Activation et désactivation
Un trigger peut être activé ou désactivé.
Si désactivé, ORACLE le stocke mais l’ignore.
Possibilité de désactiver un trigger si :
il référence un objet non disponible
on veut charger rapidement un volume de données important ou recharger
Le langage PL/SQL alphorm.com™©
on veut charger rapidement un volume de données important ou recharger
des données déjà contrôlées.
Par défaut, un trigger est activé dès sa création.
256. Activation et désactivation
Pour désactiver ou activer un trigger , on utilise l’instruction ALTER
ALTER TRIGGER <nomtrigger> DISABLE;
ALTER TABLE <nomtable> DISABLE ALL TRIGGERS;
ALTER TRIGGER <nomtrigger> ENABLE;
ALTER TABLE <nomtable> ENABLE ALL TRIGGERS;
Le langage PL/SQL alphorm.com™©
ALTER TABLE <nomtable> ENABLE ALL TRIGGERS;
257. Gestion des exceptions
La procédure RAISE_APPLICATION_ERROR
(error_number,error_message)
error_number doit être un entier compris entre -20000 et -20999
error_message doit être une chaîne de 500 caractères maximum.
Quand cette procédure est appelée, elle termine le trigger, défait la
transaction (ROLLBACK), renvoie un numéro d'erreur défini par l'utilisateur et
Le langage PL/SQL alphorm.com™©
Quand cette procédure est appelée, elle termine le trigger, défait la
transaction (ROLLBACK), renvoie un numéro d'erreur défini par l'utilisateur et
un message à l'application.
259. Récapitulatif sur les
Les déclencheurs
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Récapitulatif sur les
déclencheurs et exercices
Noureddine DRISSI
Expert consultant bases de
données
261. Ce que nous avons étudiés
Les déclencheurs LMD
Le niveau d’exécution des déclencheurs (INSTRUCTION ou LIGNE)
Comment accéder aux valeurs via OLD et NEW
Déclenchement conditionnel (WHEN)
Le langage PL/SQL alphorm.com™©
Les prédicats (INSERTING, UPDATING et DELETING)
Les déclencheurs INSTEAD OF
La directive PRAGMA AUTONOMOUS_TRANSACTION
Les tâches d’exploitation des déclencheurs
262. Les déclencheurs: exercice 10 (sol_exercice10.txt)
Créez un déclencheur LMD nommé trigLogClients qui se déclenche
après toute instruction INSERT, UPDATE ou DELETE sur la table
« clients ». Le trigger doit tracer les informartions ci-dessous dans une
table que vous aurez crée au préalable:
La date d’exécution et le user ayant effectué l’instruction
La valeur AVANT et APRES pour les colonnes NUMERO_CLI, NOM, ADRESSE,
Le langage PL/SQL alphorm.com™©
La valeur AVANT et APRES pour les colonnes NUMERO_CLI, NOM, ADRESSE,
CODE_POSTAL, VILLE et TELEPHONE
L’instruction qui à déclenchée le déclencheur (INSERT, UPDATE ou DELETE)
264. Le mot de la fin
Conclusion
Le langage PL/SQL alphorm.com™©
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Le mot de la fin
Noureddine DRISSI
Expert consultant bases de
données
266. Plan de cours
Module 1: Présentation du PL/SQL
Module 2: Les variables
Module 3: Accès à la base de données et ordres SQL
Module 4: Les structures de contrôle
Module 5: Les curseurs
Le langage PL/SQL alphorm.com™©
Module 5: Les curseurs
Module 6: Gestion des erreurs
Module 7: Les programmes stockés
Module 8: Les triggers
Module 9: Les packages
Module 10: Les déclencheurs
268. FIN
Merci pour votre attention
Conclusion
Le langage PL/SQL alphorm.com™©
Merci pour votre attention