Cous PLSQL
Cous PLSQL
Cous PLSQL
1. Section déclaration
2. Section corps du bloc
3. Section traitement des erreurs
Section déclaration
Section facultative
Obligatoire
Facultative
SET SERVEROUTPUT ON
DECLARE
x VARCHAR2(10);
BEGIN
x := 'Bonjour';
DBMS_OUTPUT.PUT_LINE(x);
END;
/
Exemple (2)
DECLARE
erreurEx EXCEPTION;
num exemplaire.numExemplaire%TYPE;
film exemplaire.numFilm%TYPE;
pb exemplaire.probleme%TYPE;
BEGIN
…
Exemple (2 suite)
….
BEGIN
SELECT numExemplaire, numFilm, probleme INTO num, film,
pb
FROMexemplaire WHEREnumExemplaire = 1;
IFprobleme ISNOTNULL THEN
RAISEerreurEx;
ENDIF;
DBMS_OUTPUT.PUT_LINE(num||' OK');
…..
Exemple (2 suite )
…..
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('numéro inconnu');
WHEN erreurEx THEN DBMS_OUTPUT.PUT_LINE(num ||
'problème');
END;
/
Types de variables
Variables scalaires
Types composés
• Enregistrement (record)
• Table
Variables scalaires
nom-variable nom-du-type;
• Exemple :
x VARCHAR2(10);
nom-variable nom-table.nom-colonne%TYPE;
• Exemple :
film exemplaire.numFilm%TYPE;
Exemple
Déclaration pour un enregistrement
Deux étapes :
• Déclaration du type de l’élément de la table
• Déclaration de la variable de type table
Déclaration pour une table
Valeur initiale :
nom-variable nom-type := valeur;
Constante :
nom-variable nom-type DEFAULT valeur;
ou
nom-variable CONSTANTnom-type := valeur;
Variables (scalaires ou composées)
Explicite avec
1. Affectations
2. Instructions du langage SQL : CLOSE, COMMIT, DELETE,
FETCH, INSERT, LOCK, OPEN, ROLLBACK,
SAVEPOINT, SELECT, SET TRANSACTION, UPDATE
3. Instructions de contrôle itératif ou répétitif
4. Instructions de gestion de curseurs
5. Instructions de gestion des erreurs
L’Affectation
Opérateur d’affectation :=
Structure alternative
Structure répétitives
Structures alternatives
WHILE condition
LOOP
instructions;
END LOOP;
Exemple
Avec la boucle While Avec la boucle For
L’interaction avec la base de données
Curseur
Les curseurs
Dès l’instant où on exécute une requête SQL, il y a création d’un
curseur.
Un curseur est une variable qui pointe vers le résultat d’une requête
SQL,
Variable
DECLARE
Cursor C1 IS select nom from pilote
where sal>1000;
OPEN C1;
FETCHnom-curseur INTOliste-variables;
ou
FETCHnom-curseur INTOnom-enregistrement;
Exemple
Exemple 2
Exemple 3
Forme syntaxique condensée avec la boucle FOR
DECLARE
CURSOR nom_curseur IS requête;
Begin
for nom_enregistrement IN nom_curseur
[(paramètres effectifs)]
Loop
Traitement;
end loop;
end;
Forme syntaxique condensée avec la boucle FOR
Statut d’un curseur
Pour Obtenir les informations d’état concernant un curseur:
NomCurseur%Attribut
Modification des données
Réduire le trafic sur le réseau (les procédures sont locales sur le serveur)
Masquer la complexité du code SQL ( simple appel de procédure avec passage
d’arguments
Mieux garantir l’intégrité des données (encapsulation des données par les
procédures)
Sécuriser l’accès aux données (accès à certaines tables seulement à travers les
procédures)
Optimiser le code (les procédures sont compilées avant l’exécution du
programme et elles sont exécutées immédiatement si elles se trouvent dans la
SGA (Zone mémoire gérée par ORACLE). De plus une procédure peut être
exécutée par plusieurs utilisateurs.
Syntaxe pour la création de procédures
Syntaxe:
Exemple:
DROP PROCEDURE Modifier_salaire;
Les fonctions
Les objectifs:
Pour pouvoir être appelée depuis des expressions SQL, une fonction définie par
l’utilisateur doit:
être une fonction stockée (ce n’est pas le cas pour les procédures stockées)
En tant que paramètres, accepter uniquement des types de données SQL
valides (et non des types spécifiques au langage PL/SQl
Renvoyer des types de données SQL valide et non des types spécifiques au
langage PL/SQL
Les fonctions appelées depuis des expressions SQL (SELECT, UPDATE, DELETE
en parallèle) ne peuvent modifier aucune tables de la BDD
Supression d’une procédure/fonction stockée
EXEMPLE:
Les packages:
Regroupent des types PL/SQL, des éléments et des sous-programmes
présentant une relation logique
Sont constitués de deux éléments:
Spécification (Déclaration)
Corps (définition)
Ne peuvent pas être appelés, paramétrés ou imbriqués
Permettent au serveur Oracle de lire simultanément plusieurs objets en
mémoire
Composants d’un package
Spécification du
package
Corps du
package
Développer un package
Syntaxe:
CREATE [Or REPLACE] PACKAGE package_name
IS/ AS
Définition des types utilisés dans le package;
prototype de toutes les procédures et fonctions du package;
END package_name;
Spécification du
package
Créer la spécification du package
Spécification du package:
• G_var est une variable globale dont la valeur d’initialisation est 0,10
• Public_procedure est une procédure publique implémentée dans le
corps du package
Créer le corps du package
Syntaxe:
CREATE [Or REPLACE] PACKAGE BODY package_name
IS/ AS
Déclaration de variables privées;
END package_name;
Spécification du
package
Corps du
package
Corps d’un package
Exemple:
Corps d’un package
Exemple:
Exemple:
Appeler des structures de package
Appeler une procédure de package depuis SQL*Plus
Performances accrues :
• L’ensembles du package est chargé en mémoire la première
fois que celui-ci est référencé
• Une seule copie est chargée en mémoire pour l’ensembles
des utilisateurs
Surcharge: plusieurs sous-programmes portant le même nom
Exercices
6. Ecrire un package contenant la spécification suivante :
- Une procédure « add-client » pour insérer les informations
d’un client
- Une procédure « add_client » pour insérer les informations
d’un client sauf la ville
- Une procédure « get_client » qui affiche les informations d’un
client donné
- Une fonction « get_age » qui retourne l’age d’un client donné
- Une procédure « delete_client » qui supprime un client donné
- Une procédure « delete_client » pour supprimer les clients
dont l’age est dans la liste {20,30,40}
7. Implémenter le corps de toutes les spécifications
Les déclencheurs ou Triggers
Les objectifs
données
1. Moment
Moment de déclenchement: à quel moment le déclencheur doit-il
s’exécuter?
BEFORE: exécution du corps du déclencheur avant le
déclenchement de l’événement LMD sur une table
AFTER: exécution du corps du déclencheur après le
déclenchement de l’événement LMD sur une table
Composants des déclencheurs LMD
2. Evénement
Evénement utilisateur déclencheur: quelle instruction LMD
entraîne l’exécution du déclencheur?
Vous pouvez utiliser les instructions suivantes
INSERT
UPDATE
DELETE
Composants des déclencheurs LMD
3. Type
Type de déclencheur: le corps du déclencheur doit-il s’exécuter une
seule fois ou pour chaque ligne concernée par l’instruction?
Remarque:
USER_TRIGGERS
ALL_TRIGGERS
DBA_TRIGGERS
Suppression
Exemple: