Vous êtes sur la page 1sur 26

Base de Données Client- Serveur :

Langage PL/SQL

Chaouki Brahim Elkhalil

ENSA4
Génie Informatique
Procédure
Stockées
Généralités

 Une Procédure ou Fonction Stockée est


un programme écrit en langage PL/SQL
pour effectuer un ensemble défini de
traitements.
 L’utilisation de procédures ou fonctions
permet de stocker, modifier et exécuter
des traitement fréquemment utilisés au
niveau du noyau du SGBD plutôt que pour
chaque application.
 Une procédure est un objet réutilisable
et la manipulation du code.
3
CHAOUKI
Développement d’une procédure

Oracle
Procedure
Builder Edit Fichier
source
Editeur 1
Stocké
dans la base

Code
Source
2
Compilation

p-code

Exécution

4
CHAOUKI
Syntaxe pour créer une
procédure

CREATE [OR REPLACE] PROCEDURE nom_procédure


(paramètre1 [mode1] type1,
paramètre2 [mode2] type2,
. . .
IS [AS]
PL/SQL Block; -- corps de la procédure

5
CHAOUKI
Paramètre de procédure

Procédure
IN paramètre
Environnement
OUT paramètre
d’appel
IN OUT paramètre

(DECLARE)

BEGIN

EXCEPTION

END;

6
CHAOUKI
Mode IN : Exemple

7369 v_id

SQL> CREATE OR REPLACE PROCEDURE raise_salary


2 (v_id IN emp.empno%TYPE)
3 IS
4 BEGIN
5 UPDATE emp
6 SET sal = sal * 1.10
7 WHERE empno = v_id;
8 END raise_salary;
9 /
Procedure created.

SQL> EXECUTE raise_salary (7369)


PL/SQL procedure successfully completed.
7
CHAOUKI
Mode OUT : Exemple

Environnement Procédure QUERY_EMP

7654 v_id
MARTIN v_name

1250 v_salary
1400 v_ comm

8
CHAOUKI
Mode OUT : Exemple

SQL> CREATE OR REPLACE PROCEDURE query_emp


1 (v_id IN emp.empno%TYPE,
2 v_name OUT emp.ename%TYPE,
3 v_salary OUT emp.sal%TYPE,
4 v_comm OUT emp.comm%TYPE)
5 IS
6 BEGIN
7 SELECT ename, sal, comm
8 INTO v_name, v_salary, v_comm
9 FROM emp
10 WHERE empno = v_id;
11 END query_emp;
12 /

9
CHAOUKI
Mode OUT et SQL*Plus

SQL> START emp_query.sql


Procedure created.

SQL> VARIABLE g_name varchar2(15)


SQL> VARIABLE g_salary number
SQL> VARIABLE g_comm number

SQL> EXECUTE query_emp (7654, :g_name, :g_salary,


2 :g_comm)
PL/SQL procedure successfully completed.

SQL> PRINT g_name


G_NAME
---------------
MARTIN

10
CHAOUKI
Mode IN OUT : Exemple
Environnement Procédure FORMAT_PHONE

'8006330575' '(800)633-0575' v_phone_no

SQL> CREATE OR REPLACE PROCEDURE format_phone


2 (v_phone_no IN OUT VARCHAR2)
3 IS
4 BEGIN
5 v_phone_no := '(' || SUBSTR(v_phone_no,1,3) ||
6 ')' || SUBSTR(v_phone_no,4,3) ||
7 '-' || SUBSTR(v_phone_no,7);
8 END format_phone;
9 /

11
CHAOUKI
Appel d’une procédure
dans SQL*Plus

SQL>VARIABLE g_phone_no varchar2(15)

SQL> BEGIN :g_phone_no := '8006330575'; END;


2 /
PL/SQL procedure successfully completed.

SQL> EXECUTE format_phone (:g_phone_no)


PL/SQL procedure successfully completed.

SQL> PRINT g_phone_no

G_PHONE_NO
---------------
(800)633-0575

12
CHAOUKI
Passer des paramètres

13
CHAOUKI
Appel d’une procédure
dans une autre procédure

SQL> CREATE OR REPLACE PROCEDURE process_emps


2 IS
3 CURSOR emp_cursor IS
4 SELECT empno
5 FROM emp;
6 emp_rec emp.empno%type;

BEGIN
7 FOR emp_rec IN emp_cursor LOOP
8 raise_salary(emp_rec.empno); --appel procédure
par son nom
9 END LOOP;
10 COMMIT;

11 END process_emps;
12 /
14
CHAOUKI
Compilation & Suppression d’une
Procédure

• Compilation la colonne STATUS de la


vue ALL | USER | DBA_OBJETS

ALTER PROCEDURE nom_procedure COMPILE;

• Suppression
DROP PROCEDURE nom_procédure
• Exemple
SQL> DROP PROCEDURE salary;
Procedure dropped.
15
CHAOUKI
Gestion des erreurs :erreur générée
par l’utilisateur
CREATE PROCEDURE verif_comm

(x_nopilote IN pilote.nopilote%type)
IS
dif pilote.sal%type := 0;
BEGIN
SELECT sal - NVL(comm,0)
INTO dif
FROM pilote
WHERE nopilote = x_nopilote;
IF dif < 0 THEN
RAISE_APPLICATION_ERROR
(-20001,'commission supérieure au salaire');
END IF;

END verif_comm;
16
–-NVL(x, val) : Remplace par val si x a la valeur NULL
CHAOUKI
Gestion des erreurs :erreur générée
par l’utilisateur
CREATE PROCEDURE del_pilote(x_no_pilote IN pilote.nopilote%type)
IS
VAR_NOM pilote.nom%type;
erreur-affect EXCEPTION ;
BEGIN
SELECT nom INTO VAR_NOM FROM affectation
WHERE pilote = x_nopilote;
RAISE erreur-affect ;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DELETE FROM pilote WHERE nopilote = x_nopilote ;
WHEN erreur-affect THEN
INSERT INTO error_tab
VALUES ('Le pilote de numéro : ' || x_nopilote || ' est

déjà affecté');
17
END del_pilote;
CHAOUKI
Fonctions
Stockées
Syntaxe pour créer une
Fonction

CREATE [OR REPLACE] FUNCTION nom_fonction


(paramètre1 IN type1,
paramètre2 IN type2,
. . .
RETURN type -- type de la valeur résultat
IS|AS
PL/SQL Block; -- corps de la fonction

19
CHAOUKI
Création d’une fonction avec
SQL*Plus : Exemple

SQL> CREATE OR REPLACE FUNCTION get_sal


2 (v_id IN emp.empno%TYPE)
3 RETURN NUMBER
4 IS
5 v_salary emp.sal%TYPE :=0;
6 BEGIN
7 SELECT sal
8 INTO v_salary
9 FROM emp
10 WHERE empno = v_id;
11 RETURN (v_salary);
12 END get_sal;
13 /
20
CHAOUKI
Exécution d ’une Fonction avec
SQL*Plus : Exemple
Environnement d’appel Fonction GET_SAL
7934 v_id

RETURN v_salary
SQL> START get_salary.sql
Procedure created.
SQL> VARIABLE g_salary number
SQL> EXECUTE :g_salary := get_sal(7934)
PL/SQL procedure successfully completed.

SQL> PRINT g_salary


G_SALARY
------------------
1300

21
CHAOUKI
Fonction dans l’ordre SQL

22
CHAOUKI
Fonction utilisateur : Restrictions SQL
• Obligatoirement une fonction stockée.
• N’utilise que des paramètres de mode IN.
• Le type de données retourné est limité à
CHAR,VARCHAR2, DATE, ou NUMBER .
• Les paramètres d’une fonction appelée doit utiliser la
notation par position.
• Les ordres INSERT, UPDATE, ou DELETE ne sont pas
autorisés dans le corps de la fonction.
• Les fonctions PL/SQL stockées ne peuvent pas être
appelées depuis la clause CHECK d’une commande
CREATE ou ALTER TABLE ni être utilisée pour spécifier
une valeur par défaut pour une colonne.
• Les procédures / fonctions appelées dans le corps de la
fonction doivent respecter les restrictions précédentes.
23
CHAOUKI
Suppression d’une Fonction

En utilisant SQL*Plus
• Par l’ordre DROP FUNCTION
• Syntaxe
DROP FUNCTION nom_fonction

• Exemple

SQL> DROP FUNCTION get_salary;


Function dropped.
24
CHAOUKI
Procédure ou Fonction?
Procédure Fonction
IN paramètre IN paramètre
Environnement
Environnement OUT paramètre d ’appel
d ’appel IN OUT paramètre

(DECLARE) (DECLARE)

BEGIN BEGIN

EXCEPTION EXCEPTION

END; END;

25
CHAOUKI
Procédure ou Fonction?

Procédure Fonction
Exécutée comme une Utilisée dans une expression
instruction PL/SQL
Pas de type de retour Type de RETOUR défini

Peut renvoyer Une seule valeur résultat


plusieurs valeurs
résultats

26
CHAOUKI

Vous aimerez peut-être aussi