PL SQL
PL SQL
PL SQL
PL/SQL
Le Langage de Bloc
PL/SQL # SQL
1
Requêtes SQL
CLIENT SERVEUR
INSERT INTO … Exécute INSERT
Résultat
DELETE FROM … Exécute DELETE
Résultat
UPDATE … Exécute UPDATE
Résultat
SELECT …
Exécute SELECT
……. Résultat
Bloc PL/SQL
CLIENT SERVEUR
BEGIN
Exécution
INSERT …
SI …. ALORS du bloc
SELECT … PL/SQL
FSI
END;
Résultat
2
Format d’un bloc PL/SQL
Variables simples
fin BOOLEAN ;
reponse BOOLEAN DEFAULT TRUE ;
ok BOOLEAN := TRUE;
3
Variables faisant référence
au dictionnaire de données
vemploye.adresse
7
Instructions PL
• Affectation (:=)
– A := B;
• Structure alternative ou conditionnelle
– Opérateurs SQL : >,<,….,OR,AND,….,BETWEEN,LIKE,IN
– IF …. THEN ….. ELSE ……END IF;
IF condition THEN
instructions;
ELSE
instructions;
IF condition THEN instructions;
ELSIF condition THEN instructions;
ELSE instructions;
END IF;
4
Structure alternative : CASE (1)
CASE variable
END CASE;
CASE
END CASE;
10
5
Structure itérative
LOOP
• LOOP instructions;
EXIT WHEN (condition);
END LOOP;
11
Serveur ORACLE
Client SQLPLUS BEGIN
DBMS_OUTPUT.PUT_LINE('Message1');
DBMS_OUTPUT.PUT_LINE('Message2');
Message1 DBMS_OUTPUT.PUT_LINE('Message3');
Message2 END;
Message3
Message1
Message2
Message3
SQL>SET SERVEROUT ON
Mémoire tampon
12
6
Le package DBMS_OUTPUT
13
• Variable ROWTYPE
SELECT * INTO vretud FROM etudiant WHERE ine=matricule;
…………
DBMS_OUTPUT.PUT_LINE('Nom étudiant : '||vretud.nom);
…………
14
7
Sélection multi – ligne : les CURSEURS
Principe des curseurs
15
16
8
Traitement d’un curseur
Programme PL/SQL
SGA
FETCH
variables
DECLARE
CURSOR c1 IS SELECT ……;
BEGIN
OPEN c1;
FETCH c1 INTO ………;
WHILE (c1%FOUND) LOOP
………
……… OPEN
FETCH c1 INTO ………;
END LOOP;
CLOSE c1;
END;
BD
17
DECLARE
CURSOR c1 IS SELECT nom,moyenne FROM etudiant;
vnom etudiant.nom%TYPE;
vmoyenne etudiant.moyenne%TYPE;
e1 ,e2 NUMBER;
BEGIN
OPEN c1;
FETCH c1 INTO vnom,vmoyenne;
WHILE c1%FOUND LOOP
IF vmoyenne < 10 THEN e1:=e1+1;
INSERT INTO liste_refus VALUES(vnom);
ELSE e2:=e2+1;
INSERT INTO liste_recus VALUES(vnom);
END IF;
FETCH c1 INTO vnom,vmoyenne;
END LOOP;
CLOSE c1;
DBMS_OUTPUT.PUT_LINE(TO_CHAR(e2)||'Reçus ');
DBMS_OUTPUT.PUT_LINE(TO_CHAR(e1)||‘Refus ');
COMMIT;
END;
18
9
Les variables système des Curseurs
• Curseur%FOUND
– Variable booléenne
– Curseur toujours ‘ouvert’ (encore des lignes)
• Curseur%NOTFOUND
– Opposé au précédent
– Curseur ‘fermé’ (plus de lignes)
• Curseur%COUNT
– Variable number
– Nombre de lignes déjà retournées
• Curseur%ISOPEN
– Booléen : curseur ouvert ?
19
10
Deux types d’exceptions
• Exceptions SQL
– Déjà définies (pas de déclaration)
• DUP_VAL_ON_INDEX
• NO_DATA_FOUND
• OTHERS
– Non définies
• Déclaration obligatoire avec le n° erreur (sqlcode)
nomerreur EXCEPTION;
PRAGMA EXCEPTION_INIT(nomerreur,n°erreur);
• Exceptions applicatives
– Déclaration sans n° erreur
nomerreur EXCEPTION;
21
DECLARE
enfant_sans_parent EXCEPTION;
PRAGMA EXCEPTION_INIT(enfant_sans_parent,-2291);
BEGIN
INSERT INTO fils VALUES ( ……. );
EXCEPTION
WHEN enfant_sans_parent THEN
………
WHEN OTHERS THEN
………
END;
22
11
Procédures Stockées
Fonctions
24
12
Procédures Stockées : Principe (2)
CLIENT SERVEUR
PROCEDURE P(v1,v2) AS
EXECUTE P(p1, p2); P
BEGIN
Ordre SQL et PL/SQL
………..
END P;
Retour résultats
25
26
13
Exemple 1 de procédure stockée
inscription d’un étudiant
BEGIN
END;
/
27
• A partir de sqlplus
ACCEPT vide PROMPT 'Entrer le matricule : '
…………
EXECUTE inscription(‘&ide’,'&vnom',’&an_ins‘,
&spec’);
• A partir de PL/SQL
inscription(ide,nom,an_ins, spec);
28
14
Les Fonctions stockées
29
RETURN(variable);
END;
/
1 ou plusieurs RETURN
30
15
Exemple de fonction stockée
31
BEGIN
………
IF moy_points_marques(equipe) > 20 THEN ………
END;
32
16