Vous êtes sur la page 1sur 21

Copyright C.Deblangy Oracle PL/SQL V1.

0 1
Extension du SQL qui permet de regrouper un ensemble de
commandes et de les soumettre au noyau comme un bloc
unique de traitement
Programme PL/SQL
DECLARE
Dclarations des variables, des constantes,
des curseurs explicites et des exceptions
BEGIN
Commandes excutables et instructions PL/SQL
EXCEPTION
Code de gestion des erreurs

Copyright C.Deblangy Oracle PL/SQL V1.0 2


Compilation et excution dun bloc PL/SQL
-- Dbut du Bloc PL/SQL
DECLARE
Dclarations des variables, des constantes,
des curseurs explicites et des exceptions
BEGIN
Commandes excutables et instructions PL/SQL
EXCEPTION
Code de gestion des erreurs
END;
-- Fin du Bloc PL/SQL
-- Le / qui suit compile et excute le bloc; show error donne le dtail des erreurs
/
show error

Copyright C.Deblangy Oracle PL/SQL V1.0 3


Variables et constantes
Curseurs
Exceptions dont le traitement sera dtaill dans EXCEPTION
Types de donnes
Scalaires
Binary_Integer, Decimal, Float, Integer, Natural, Number, Positive,
Real, Smallint
Char, Long, Varchar ou Varchar2,
Boolean, Date, Rowid
Raw, LongRaw
Composs
Record
Copyright C.Deblangy Oracle PL/SQL V1.0 4
Variables et constantes
Nom [CONSTANT] { type | identificationTYPE |
identifiant%ROWTYPE } [ NOT NULL ] [{ := | DEFAULT }
expression PL/SQL ];
Exemple toto table1.colonne2%TYPE
4 types d'expressions
numriques, chanes, dates, boolennes

Copyright C.Deblangy Oracle PL/SQL V1.0 5


Enregistrements
Dclaration du type
TYPE nom_type IS RECORD
{ champ { type_chp | table.colonne%TYPE } [ NOT NULL] [, ...]
Dclaration d'une variable
Nom_variable nom_type
Exemple :
TYPE identit IS RECORD
(Nom char(15),
Prenom char(25),
Date_Naiss DATE);
Var Identit
Copyright C.Deblangy Oracle PL/SQL V1.0 6
Mise en uvr e de Tableaux (4/5)

Cration du type tableau (Dans DECLARE)


TYPE nom_du_type IS VARRAY (Taille) OF Type_Case)
Exemple TYPE numberTab IS VARRAY (10) OF NUMBER;
Dclaration dun tableau t de type nom_du_type (dans DECLARE)
Nom_du_Tableau nom_du_type
Exemple t numberTab;

Allouer un tableau (dans BEGIN END)


Nom_Du_Tableau:= Type()
Exemple t := numberTab();
Dimensionner le tableau (dans BEGIN END)
Nom_Du_Tableau.Extent(TailleRelle)
Exemple : t.EXTEND (10);
Utiliser un tableau (Dans BEGIN END)
t(i) := 3; x:= t(i);
Copyright C.Deblangy Oracle PL/SQL V1.0 7
Dclaration de curseur
CURSOR nom [(nom_param type [, ...] ) ]
IS SELECT .............
Dclaration d'une exception
nom_exception EXCEPTION

Copyright C.Deblangy Oracle PL/SQL V1.0 8


IF condition THEN traitement
[ ELSEIF condition THEN traitement ] [, .....]
[ ELSE traitement ]
END IF ;

LOOP
traitement
END LOOP;

Sortie de boucle LOOP :


EXIT, EXIT WHEN condition, GOTO

Copyright C.Deblangy Oracle PL/SQL V1.0 9


FOR compteur IN [ REVERSE ] mini .. maxi
LOOP
traitement
END LOOP;

WHILE condition LOOP


Traitement
END LOOP;

Copyright C.Deblangy Oracle PL/SQL V1.0 10


Sor tie dun r sultat sur la sortie standard

PACKAGE DBMS_OUTPUT
DEMARRAGE DU SERVEUR DIMPRESSION
SET SERVEROUTPUT ON
UTILISATION DE LA METHODE PUT_LINE
dbms_output.put_line (string)
Exemple (nbre est un entier)
dbms_output.put_line (resultat= || to_char(nbre));
ARRET DU SERVEUR DIMPRESSION
SET SERVEROUTPUT OFF

Copyright C.Deblangy Oracle PL/SQL V1.0 11


Select (le rsultat ne contient quune ligne)
SELECT liste INTO { liste-de_variables | nom_enregistrement }
FROM liste_tables [ WHERE condition ]
Si le rsultat du select comprend plusieurs lignes, il faut utiliser
un curseur explicite
Ouverture du curseur
OPEN nom_curseur [ paramtres ]
Lecture dune ligne et passage du curseur la ligne suivante
FETCH nom_curseur INTO
{ nom_variable [, ... ] | nom_enregistrement
Fermeture du curseur
CLOSE nom_curseur
Copyright C.Deblangy Oracle PL/SQL V1.0 12
Cur seur s (2/2): Attr ibuts dun cur seur explicite

Utilisation
Nom_curseur%Attribut
Liste des attributs
%FOUND (boolen vrai si une ligne a t lue)
%NOTFOUND
%ISOPEN (boolen vrai si le curseur est ouvert)
%ROWCOUNT (nombre de lignes dj lues)

Copyright C.Deblangy Oracle PL/SQL V1.0 13


Exceptions prdfinies (Div/0 etc) (Liste en annexe)
Traitement des exceptions
EXCEPTION
WHEN err1 THEN Traitement1
......
WHEN OTHERS THEN Traitement des autres exceptions
END ;
Exceptions externes dfinies par le programmeur
RAISE nom_exception arrte l'excution du programme et le
droute sur le gestionnaire de l'exception
RAISE nom_exception_externe_ou_interne
Copyright C.Deblangy Oracle PL/SQL V1.0 14
Exemple complet
DECLARE
stock_a_zero EXCEPTION
BEGIN
...
BEGIN
...
IF qte_stock = 0 THEN
RAISE stock_a_zero
END IF;
EXCEPTION
WHEN stock_a_zero THEN
traitement
END;
END;
Fonctions relatives aux erreurs
SQLCODE renvoie la valeur numrique du code de la dernire erreur
SQLERRM libell de la dernire erreur

Copyright C.Deblangy Oracle PL/SQL V1.0 15


CREATION ET MISE A JOUR DUNE PROCEDURE STOCKEE (le / permet la compilation et lexcution de
la cration/maj)
CREATE OR REPLACE PROCEDURE nom_procedure (liste de paramtres) IS
begin
----
declare
----
begin
----
exception
---
end;
end;
/
Syntaxe dun paramtre
Nom_paramtre [ IN | OUT | IN OUT ] type-du-paramtre
Le type ne peut tre que number, char ou boolean

Copyright C.Deblangy Oracle PL/SQL V1.0 16


EXECUTION DUNE PROCEDURE STOCKEE
Dans un bloc PL/SQL, il suffit de donner son nom
BEGIN
Nom_procedure
END;
/
DESTRUCTION DUNE PROCEDURE/FONCTION STOCKEE
DROP PROCEDURE nom_procedure
DROP FUNCTION nom_fonction
CREATION/MISE A JOUR DUNE FONCTION stocke
CREATE OR REPLACE FUNCTION Nom_fonction (Liste de paramtres)
RETURN type_du_code_de_retour_de_la_fonction
IS
programmation de la fonction (ne pas oublier un ou plusieurs RETURN)
/
VUE DE LA METABASE : USER_SOURCE
select unique name, type, from user_source;
select text from user_source where name=Nom_procedure order by line;
Copyright C.Deblangy Oracle PL/SQL V1.0 17
Regroupement de procdures de fonctions et de variables
Deux parties
Spcification : dclaration des procdures, fonctions et variables accessibles aux utilisateurs du
package
Corps (Body) : code PL/SQL
Appel dun objet du package
NomDuPackage.NomObjet
Exemple DBMS_OUTPUT.PUT_LINE()
PACKAGES STANDARDS
DBMS_OUTPUT (Messages de contrle dexcution sur la sortie standard)
UTL_FILE (Ecrire et lire dans les fichiers)
UTL_MAIL (Envoi de mails)
DBMS_JOBS (Soumission diffre de travaux)
DBMS_LOB (Utilisation de donnes binaires)

Copyright C.Deblangy Oracle PL/SQL V1.0 18


EXEMPLE DE CREATION DUN PACKAGE
CREATE OR REPLACE PACKAGE compteur IS
PROCEDURE Reset;
FUNCTION Nextvalue RETURN NUMBER ;
END compteur;
/
CREATE OR REPLACE BODY compteur IS
cpt NUMBER :=0;

PROCEDURE Reset IS
BEGIN
cpt:=0;
END;
FUNCTION nextValue RETURN NUMBER IS
BEGIN
cpt:=CPT+1;*
RETURN cpt ;
END;
END compteur;
/
EXEMPLE DAPPEL DANS UN BLIC PL/SQL
Compteur.Reset()
X:=Compteur.Nextvalue

Copyright C.Deblangy Oracle PL/SQL V1.0 19


Un trigger permet dassocier du code PL/SQL aux actions INSERT/UPDATE/DELETE
CREATION/MISE A JOUR DUN TRIGGER
CREATE OR REPLACE TRIGGER nom_trigger
(AFTER | BEFORE) (INSERT | DELETE | UPDATE | combinaison(s) avec OR)
ON nom_table
[ FOR EACH ROW ]
BEGIN
code du traitement du trigger
END;
/
ACTIVATION / DESACTIVATION DUN/PLUSIEURS TRIGGER(S)
ALTER TRIGGER nom_trigger (ENABLE | DISABLE)
ALTER TRIGGER nom_table (ENABLE | DISABLE) ALL TRIGGERS;
Dans le code du traitement, il est possible daccder aux donnes
Avant mise jour : :old.nom-champ
Aprs Mise jour : :new.nom_champ
Vues de la mtabase
USERS_TRIGGERS, USERS_TRIGGERS_COL,
ALL_TRIGGERS, ALL_TRIGGERS_COLS
DBA_TRIGGERS, DBA_TRIGGERS_COL

Copyright C.Deblangy Oracle PL/SQL V1.0 20


DECLENCHEMENT DE LEXECUTION DUN TRIGGER
INSERT / UPDATE / DELETE sur la table concernre

DESTRUCTION DUN TRIGGER


DROP TRIGGER nom_trigger

Copyright C.Deblangy Oracle PL/SQL V1.0 21