Académique Documents
Professionnel Documents
Culture Documents
Introduction
Bloc PL/SQL
Déclaration des variable
Structure de contrôle
Curseurs
Les exceptions
p
Les fonctions et procédures
Les packages
Les triggers
2013-2014 N.EL FADDOULI
1
Page 1
Procédures et fonctions
PL/SQL est aussi utilisé pour définir des procédures et fonctions stockées
dans la BD
BD..
Syntaxe:: Procédure
Syntaxe
CREATE [ OR REPLACE ] PROCEDURE
Nom_procédure [ (liste d’arguments
d’arguments))] { IS
IS|
| AS
AS}}
[ variables locales ]
Corps PL
PL--SQL
syntaxe: Fonction
syntaxe:
CREATE [ OR REPLACE ] FUNCTION
Nom_fonction [ ( liste d’arguments ) ] RETURN type { IS
IS|
| AS
AS}}
[ variables locales ]
Corps PL
PL--SQL
Procédures et fonctions
L’option OR REPLACE permet de spécifier au système le remplacement de
la procédure ou de la fonction si elle existe déjà dans la BD
BD..
Li d’arguments
Liste d’ : nom_arg [ IN
d’arguments: IN|
| OUT
OUT|| IN OUT ] Type
T
IN:: la variable est passée en entrée
IN
OUT:: la variable est renseignée par la procédure puis renvoyée à
OUT
l’appelant
IN OUT:
OUT: passage par référence.
référence.
le mot RETURN permet de spécifier le type de la donnée de retour
retour..
Le corps PL/SQL doit commencer par le mot clé BEGIN et se termine par
END.. Il peut être composé d’une partie déclarative , d’un corps de la
END
procédure et d’un gestionnaire d’erreurs.
d’erreurs.
2013-2014 N.EL FADDOULI
51
Page 2
Exemples (1
(1/3)
Exemple : Créer une procédure qui permet de baisser le prix d'un produit de la
table::
table Produit (Nump,
Nump, nomp,
nomp, pu, qstock
qstock))
CREATE PROCEDURE baisse_prix ( nprod IN NUMBER,
Taux IN NUMBER ) IS
BEGIN
if Taux <1 then
UPDATE p
produit SET PU= PU* ( 1 - Taux)
WHERE Nump
Nump== nprod ;
end if;
if;
END ;
Exemples (2
(2/3)
Exemple : Créer une fonction qui retourne le nom d’un client
Clientno, cname,
Client (Clientno, cname, …)
CREATE FUNCTION NomClient
N Cli ( N IN Number
N b ) RETURN Varchar
Number) V h 2(30
Varchar2 30)) IS
S Client.
Client.Cname%
Cname%Type
Type;;
BEGIN
Select Cname into S from Client Where Client
Client..ClientNo = N;
Return (S)
(S);;
EXCEPTION
WHEN NO_DATA_FOUND THEN Return ('Aucun');
('Aucun');
END ;
2013-2014 N.EL FADDOULI
53
Page 3
Exemples (3
(3/3)
Appel d'une procédure ou fonction
SQL> Declare
A Client
Client..ClientNo%
ClientNo%type;
type; S Client
Client..Cname%
Cname%type
type;;
BEGIN
A := &Numero_Client;
Numero_Client;
S := NomClient
NomClient(A)
(A);;
dbms_output..put_line
dbms_output put_line(( S );
END ;
2009-2010
2013-2014 N.EL FADDOULI
54
Exemple:
Exemple:
Page 4
Suppression d’une procédure ( fonction)
Pour supprimer
pp une p
procédure
Les sous-
sous-blocs
Un bloc PL/SQL peut contenir un sous bloc:
Declare
Variables
Begin
…..
Declare
Variables
Begin
g
….
End;
…..
End;
2013-2014 N.EL FADDOULI
57
Page 5
Les sous-
sous-blocs: Exemple
Declare
a number;
number; b varchar
varchar22(30);
30); c number;
number;
B i
Begin
a:=10
a:=10;; b:='Imagination'; c:= 20;
20;
Declare
a number
number; b varchar
varchar22(30);
30); d number
number;;
Begin
d:=cc+5;
d:=
a:=40
a:= 40;; b:='programmation';
p g ;
End;
b:=b||' Esprit'; a:=a+d
a:=a+d;
dbms_output..put_line(
dbms_output put_line(a||' '||b||' '||c);
End;
2013-2014 N.EL FADDOULI
58
Les packages
Encapsuler des procédures, des fonctions, des curseurs et des
variables comme une unité dans la base de données.
données.
Etapes de création
création::
Création des spécifications du package
spécifier la partie publique du package (fonctions, procédures,
types, variables, constantes, exceptions et curseurs)
curseurs).
Création du corps du package
défi i les
définir l procédures,
éd l fonctions,
les f i l curseurs et les
les l exceptions
i quii
sont déclarés dans les spécifications du package
package..
définir d’autres objets non déclarés dans les spécifications
spécifications.. Ces objets
sont alors privés
privés..
2013-2014 N.EL FADDOULI
59
Page 6
Les packages
Création des spécifications du package
CREATE [ OR REPLACE ] PACKAGE nom_package
{ IS
IS|| AS }
spécifications PL/SQL
END nom_package;
spécification PL/SQL::=
::=declaration_de_variable|
declaration_de_variable|
declaration_d_enregistrement|
declaration_de_curseur|
declaration_d_execption|
declaration_de_procedure|
declaration_de_fonction…
2013-2014 N.EL FADDOULI
60
Exemple
CREATE OR REPLACE PACKAGE gest_empl IS
-- Variables publiques
Sal EMP
EMP..sal
sal%
%Type ;
END gest_empl
gest_empl;;
Page 7
Les packages
Création du corps du package
CREATE [ OR REPLACE ] PACKAGE BODY nom_package
{ IS
IS|| AS }
spécifications PL/SQL
END nom_package
nom_package;;
spécification PL/SQL::=
::=declaration_de_variable
declaration_de_variable||
declaration_d_enregistrement|
declaration_d_enregistrement|
declaration_de_curseur|
declaration de curseur|
declaration_de_curseur
curseur|
declaration_d_execption||
declaration_d_execption
declaration_de_procedure|
declaration_de_procedure|
declaration_de_fonction…
declaration_de_fonction…
2013-2014 N.EL FADDOULI
62
Exemple
CREATE OR REPLACE PACKAGE BODY gest_empl IS
E EMP
EMP%%Rowtype ; --
--Variables
Variables privées
-- Fonctions publiques
FUNCTION Augmentation ( Numemp IN EMP.empno
EMP.empno%Type
%Type ,
Pourcent IN NUMBER ) Return NUMBER IS
Salaire EMP.sal%Type ;
BEGIN
Select sal Into Salaire From EMP Where empno = Numemp ;
Salaire := Salaire * (Pourcent + 1 ); -- augmentation virtuelle
Sal := Salaire ; -- Affectation de la variable globale publique
Return( Salaire ) ; -- retour de la valeur
END Augmentation;
2013-2014 N.EL FADDOULI
63
Page 8
-- Procédure privée
PROCEDURE Affiche_Salaires IS
CURSOR C_EMP IS select * from EMP ;
BEGIN
OPEN C_EMP ; FETCH C_EMP Into E ;
While C_EMP%
C_EMP%FOUND Loop
dbms_output..put_line
dbms_output put_line(( 'Employé ' || E.ename ||
' -> '|| To_char(
To_char( E.sal ) );
FETCH C_EMP
C EMP Into
I E;
End loop ;
CLOSE C_EMP ;
END Affiche_Salaires ;
2013-2014 N.EL FADDOULI
64
-- Procédures publiques
Salaire EMP.sal%Type ;
BEGIN
END gest_empl
gest_empl;; /
2013-2014 N.EL FADDOULI 65
Page 9
Package
L'accès à un objet d'un paquetage :
nom_paquetage.nom_objet[(
[(liste
liste paramètres
paramètres)]
)]
Exemple:: Appel de la fonction Augmentation du paquetage
Exemple
SQL> Declare
A emp
emp..sal%
sal%Type ;
Begin
A := gest_empl.Augmentation
Augmentation(( 100,
100, 0.2 ) ;
…..
dbms_output. put_line(gest_empl.sal)
dbms_output.put_line( sal);;
…..
End ; /
2013-2014 N.EL FADDOULI
66
Page 10