Académique Documents
Professionnel Documents
Culture Documents
Chapitre V:
Les sous programmes
les sous programmes stockés
Plan
Eléments de contenu
Introduction
Définitions
Les procédures et les fonctions
Les procédures et les fonctions stockées
Applications
3
Introduction
4
Définition
• Une procédure est une unité de traitement qui peut contenir des
commandes du LMD du SQL, des instructions PL/SQL, des variables,
des constantes, des curseurs et un gestionnaire d’exceptions.
5
Déclaration d’une fonction ou d’une
procédure
Declare
procedure <nom_procedure> [(liste d’arguments)]
{Is/As} Déclaration des variables
Begin
{Corps de la procedure}
End;
Begin
//corps du programme principal
End;
6
Déclaration d’une fonction ou d’une
procédure
Declare --(PP)
function <nom_fonction> [(liste d’arguments)] return type
{Is/As} Déclaration des variables
Begin
{Corps de la function}
End;
Begin --(début du PP)
//corps du programme principal
End;--(Fin du PP)
7
Déclaration d’une fonction ou d’une
procédure
8
Déclaration d’une fonction ou d’une
procédure
Exemple
Ecrire un bloc anonyme en plsql permettant d’afficher les employés d'un département donné
accept NumDep prompt('donner un numéro de département')
set serveroutput on
declare
cursor cr_emp is
select employee_id,last_name,first_name from hr.employees where
department_id=&NumDep;
rec_emp cr_emp%rowtype;
begin
open cr_emp;
loop
fetch cr_emp into rec_emp;
exit when cr_emp%notfound;
dbms_output.put_line('numéro de l employé='|| ' '|| rec_emp.employee_id||' son
prénom'|| ' '||rec_emp.first_name|| ' '||'son nom'||' '||rec_emp.last_name);
end loop;
close cr_emp; 9
end;
Exemple: Ecrire un sous programme permettant d’afficher
les employés d'un département donné
accept NumDep prompt('donner un numéro de département')
set serveroutput on
declare
---declare pour le programme principal(bloc plsql)
--déclaration des vbles, des curseurs,exceptions, record,tableau,fonctions, procedures
procedure affich_employes(Numero_departement hr.employees.department_id%type)
Is
--------
Begin
--------------------
end affich_employes;
begin
--debut du pp
dbms_output.put_line('la liste des employés du département 90 sont:');
affich_employes(90);
dbms_output.put_line('la liste des employés d un département donné sont:');
affich_employes(&NumDep);
10
--fin du pp
Exemple: Ecrire un sous programme permettant d’afficher
les employés d'un département donné
Procedure affich_employes (Numero_departement hr.employees.department_id%type)
is
--declaration variables,curseurs,exceptions... de la procedure
cursor cr_emp is
select employee_id,last_name,first_name from hr.employees where
department_id=Numero_departement ;
rec_emp cr_emp%rowtype;
--début de la procedure
begin
open cr_emp;
loop
fetch cr_emp into rec_emp;
exit when cr_emp%notfound;
dbms_output.put_line('numéro de l employé='|| ' '|| rec_emp.employee_id||' son prénom'|| '
'||rec_emp.first_name|| ' '||'son nom'||' '||rec_emp.last_name);
end loop;
close cr_emp;
--fin de la procedure 11
end affich_employes;
Exemple: Ecrire une fonction permettant d’afficher le nombre des employés d’un département
donné
declare
--debut du pp
nb number;
function Nbre_employes(Numero_departement in hr.employees.department_id%type)return
number
is
v_nb number;
begin
select count(*) into v_nb from hr.employees where department_id=Numero_departement;
return v_nb;
end Nbre_employes;
begin
--debut du pp
--appel de la fonction
nb:=Nbre_employes(90);
dbms_output.put_line('le nombre d employés sont :'||nb);
--fin du pp
end; 12
Les procédures et les fonctions stockées
Une procédure stockée est un bloc de code PL/SQL nommé stocké dans
la base de données et qui peut être exécuté à partir des applications ou
d’autres procédures stockées.
Les procédures et les fonctions sont créées comme des objets de la base
appartenant à un utilisateur. Elles sont accessibles à travers les outils
SQL Plus, SQL Forms, etc…(sous programmes stockés)
13
Les procédures et les fonctions stockées
15
Exemple: Ecrire un sous programme stocké permettant d’afficher
les employés d'un département donné
create or replace procedure affich_employes(Numero_departement
hr.employees.department_id%type)
is
--declaration variables,curseurs,exceptions... de la procedure
cursor cr_emp is
select employee_id,last_name,first_name from hr.employees where
department_id=Numero_departement ;
rec_emp cr_emp%rowtype;
--début de la procedure
begin
open cr_emp;
loop
fetch cr_emp into rec_emp;
exit when cr_emp%notfound;
dbms_output.put_line('numéro de l employé='|| ' '|| rec_emp.employee_id||' son prénom'|| '
'||rec_emp.first_name|| ' '||'son nom'||' '||rec_emp.last_name);
end loop;
close cr_emp;
--fin de la procedure 16
end affich_employes;
Appel au procédure stockée
17
Appel au procédure stockée
18
Fonction stockée:
Ecrire une fonction stockée permettant d’afficher le nombre des
employés d’un département donné
create or replace function Nbre_employes(Numero_departement in
hr.employees.department_id%type)return number
is
v_nb number;
begin
select count(*) into v_nb from hr.employees where
department_id=Numero_departement;
return v_nb;
end Nbre_employes;
19
Appel au fonction stockée :
afficher le nombre des employés du département 90.
appel de la fonction
solution 1 :
select Nbre_employes(90) from dual;
solution 2 :
--ecrire un bloc plsql qui permet d’afficher le nombre des employés du
département 90.
set serveroutput on
declare
nb number;
begin
nb:=Nbre_employes(90);
dbms_output.put_line('le nombre d employés sont :'||nb);
end;
20