Vous êtes sur la page 1sur 19

Réalisé par : Mme YEKKEN Sabrine

Version : 2012 -2013


55

Objectifs du cours
1. Les sous-programmes déclarés dans un bloc anonyme: Procédure et

fonctions.

2. Les sous-programmes stockés : Procédures et fonctions stockées

3. Utilisation et exécution des fonctions et procédures stockées


56

Introduction.
▪ les blocs anonymes sont des blocs PL/SQL exécutables non
nommés. Etant donné qu'ils n'ont pas de nom, ils ne peuvent
être ni réutilisés, ni stockés au niveau du serveur ORACLE.
▪ Les procédures et fonctions sont des variables pouvant être
déclarées dans un bloc ANONYME PL/SQL.
▪ Les procédures et fonctions stockées sont des blocs PL/SQL
nommés. Elles sont également appelées sous-programmes.
Ces sous-programmes sont compilés et stockés dans la base
de données.
57

Les différences Entre Bloc anonyme et bloc nommé.


Blocs anonymes Sous-programmes

Blocs PL/SQL non nommés Blocs PL/SQL nommés

Compilés chaque fois Compilés une seule fois

Non stockés dans la base de données Stockés dans la base de données

Pas d'appel possible par d'autres Appel possible par d'autres applications,
applications car ils sont nommés

Les sous-programmes appelés fonctions


Ne renvoient pas de valeurs
doivent renvoyer des valeurs

Ne peuvent pas accepter de paramètres Peuvent accepter des paramètres


58

Les Fonctions stockées . Syntaxe

CREATE OR REPLACE FUNCTION <nom_fonction>


(ARG1 typE1, arG2 TYPE2, …)
RETURN <type_de_retour>
IS | AS
<déclaration_des_variables>
BEGIN
<corps_de_la_fonction>
END;
/

RQ : Vous pouvez utiliser la commande DESCRIBE afin d'examiner les


arguments et le type de données renvoyé par la fonction.
DESCRIBE <nom_fct>;
59

Les Fonctions stockées . Exemple1

Ecrire une fonction stockée permettant de retourner le nombre des


départements.

CREATE OR REPLACE FUNCTION APPEL1 DE LA FONCTION:


fn_nbrDepart SELECT fn_nbrDepart FROM Dual;
RETURN number IS CREATION D’UNE VARIABLE
nbrDepart number; SQL> Var a number;
BEGIN APPEL2 DE LA FONCTION:
SELECT count(department_id) INTO BEGIN
nbrDepart FROM departments; SELECT fn_nbrDepart into :a FROM
RETURN nbrDepart ; dual;
END; / END; /
60

Les Fonctions stockées . Exemple2

Ecrire une fonction stockée qui prend en paramètre l’id de l’employé et qui
retourne le nom du département auquel il est associé.

CREATE OR REPLACE FUNCTION SELECT department_name INTO


fn_nomDepart (idEmp nomDepart FROM departments
employees.employee_id%type) INNER JOIN employees ON
RETURN employees.department_id=departments.
departments.department_name%type IS department_id and employee_id=
nomDepart idEmp;

departments.department_name%type ; RETURN nomDepart ;


BEGIN END; /
61

Appel de fonction stockée .

▪ Les fonctions sont appelées soit dans une requête SQL soit dans
un bloc anonyme PL/SQL soit dans le corps d’un autre objet.
▪ Si la fonction n’est pas appelée directement dans un requête
SQL, il faut créer une variable hôte pour y stocker la valeur
retournée.
▪ Lors de l’exécution, la variable hôte est initialisée avec la valeur
renvoyée par le RETURN. Une fonction peut accepter plusieurs
paramètres IN mais elle ne doit retourner qu’une seule valeur.
62

Les Procédures stockées . Syntaxe

CREATE OR REPLACE PROCEDURE <nom_procedure>


(arg1 [mode1] type1, arg2 [mode2] type2, . . .)
IS | AS
<déclaration_des_variables>
Begin
--corp de la procedure
<instructions;>
End; /

RQ: Le mot DECLARE n’existe pas; les variables sont déclarées entre
IS et BEGIN

63

Les Procédures stockées . Modes de passage de paramètre (1/4)

Pour une procédure, il y a trois modes de passage de paramètre:


▪ les paramètres IN : en entrée (par défaut)
▪ les paramètres OUT : en sortie
▪ les paramètre IN OUT : en entrée et sortie

RQ: Tous les paramètres d’une fonction sont en mode IN (dans ce


cas, on n’est pas obligé d’écrire le mode).
64

Les Procédures stockées . Les Modes IN-OUT-IN OUT (2/4)

▪ Le mode IN: Paramètre en entrée, non modifié par la procédure.

▪ Le mode OUT: Paramètre en sortie, peut être modifié par la

procédure, transmis au programme appelant

▪ Le mode IN OUT: paramètre à la fois en entrée et en sortie.

▪ Le mode par défaut est le mode IN


65

Procédure stockée. Enonce Exemple1

1. Ecrire un bloc anonyme PL/SQL permettant de créer la table


DEPT comme suit : (department_id number, department_name
varchar2(50))
2. Ecrire une procédure stockée qui permet d’insérer une ligne dans
la table DEPT .
3. Ecrire une procédure stockée prenant en paramètre une nouvelle
colonne et un nouveau type comme 2 paramètre et permettant de
rajouter cette colonne à la table DEPT.
66

Procédure stockée. Exemple1 – Réponse (1/2)

1.
DECLARE 2.
Vsql varchar2(100); CREATE OR REPLACE PROCEDURE add_dept

BEGIN IS

Vsql:=‘create table dept dept_id dept.department_id%TYPE :=&a;

(department_id number, dept_name dept.department_name%TYPE

department_name varchar2(50) :=‘&b’;

)’; BEGIN

Execute immediate(vsql); insert into


dept(department_id,department_name)
END;/
values(dept_id,dept_name);
commit; END;/
67

Procédure stockée. Exemple1 – Réponse (2/2)

3.
CREATE OR REPLACE PROCEDURE proc_alterDept
(nom_col varchar2, type_col varchar2)
IS
vsql varchar2(100):='alter table DEPT add (';
BEGIN
vsql:=vsql||nom_col||' '||type_col||')';
dbms_output.put_line(vsql);
execute immediate vsql;
END;
/
68

Appel de procédure stockée. Exemple1

BEGIN
add_dept; OU EXECUTE add_dept ;
END;
/

RQ:
▪ une procédure doit être appelée dans un bloc anonyme et non
pas dans une requête SQL sinon Directement avec la commande
EXECUTE.
69

Procédure stockée . Enonce Exemple2

CREATE OR REPLACE PROCEDURE select count(*) into type_col from


proc_alterDept employees;
(nom_col varchar2, type_col in out END; /
varchar2)
IS L’appel de la procédure stockée:
vsql varchar2(100):='alter table DEPT add DECLARE
('; a varchar2(20) :='number';
BEGIN BEGIN
vsql:=vsql||nom_col||' '||type_col||')'; proc_alterDept('a',a);
dbms_output.put_line(vsql); dbms_output.put_line(a);
execute immediate vsql; END;
70

Code source de la procédure.

▪ Le code source de la procédure est stocké dans la table


« user_source ».
▪ Vous pouvez examiner le code source de la procédure en
exécutant la commande suivante :

SELECT * FROM user_source


WHERE name='ADD_DEPT';
Différence entre procédure et fonction Stockée.

▪ La différence entre une procédure et une fonction stockée est


qu'une fonction doit renvoyer une valeur au programme
appelant. Par conséquent, la syntaxe contient RETURN TYPE,
qui indique le type de données de la valeur renvoyée par la
fonction stockée.
▪ Une procédure peut renvoyer une valeur via un paramètre OUT
ou IN OUT.

Vous aimerez peut-être aussi