0% ont trouvé ce document utile (0 vote)
144 vues23 pages

Fonctions et Packages en PL/SQL

Transféré par

Mariem Ben Kamel
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
144 vues23 pages

Fonctions et Packages en PL/SQL

Transféré par

Mariem Ben Kamel
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Les fonctions, les procédures et les package

en PL/SQL

1
Plan

• Les Procédures en PL/SQL

• Les Fonctions en PL/SQL

• Les Package en PL/SQL

2
Introduction
• Une procédure est un bloc PL/SQL nommé sans valeur de retour stocké sur le
serveur oracle

• Une fonction retourne une valeur

• Les packages regrouperont des fonctions et des procédures fortement liées conçus
pour répondre à des besoins spécifiques et permettre une utilisation autonome

• Exemple : Package pour la gestion des articles d’une société

• Sélection de tous les articles,


• Mise à jour d’un article,
• Suppression d’un article,
• Ajout d’un article.

• Les packages sont utilisés par les programmes clients comme de simples librairies
distantes sur le serveur
3
Les procédures : Syntaxe

CREATE [ OR REPLACE ] PROCEDURE [<user>] nom_proc

(arg1 IN type1 [DEFAULT val_initiale], arg2 ..)

AS ou Is

[ Déclarations des variables locales ]

Begin

//code de la procedure

Exception

//Gestion des exceptions


End;
4
Les procédures : Syntaxe

5
Exemple : Compter le nombre
d’employés pour un département donné
CREATE OR REPLACE PROCEDURE Proc_Dept (NumD IN dept.deptno%TYPE)
IS

v_NbrEmp NUMBER;

BEGIN

SELECT COUNT(deptno)
INTO v_NbrEmp
FROM emp
WHERE deptno=NumD;
DBMS_OUTPUT.PUT_LINE('Nombre des employés : '||' '||v_NbrEmp);

END;
6
Exemple: Paramètre d’entrées/sortie

CREATE OR REPLACE PROCEDURE format_tel (v_tel IN OUT VARCHAR2)


IS

BEGIN
v_tel := substr(v_tel,6,8);

END ;

• substr(ch, Debut, Longueur) : Fonction Sql permettant d’extraire une


sous-chaine à partir de de la chaine ‘ch’ partant de la position ‘Debut’
ayant une taille définie par ‘Longueur’

7
Explication
• La procédure format_tel prend un numéro de téléphone en entrée
(v_tel) et modifie son format en lui affectant le numéro de téléphone
sans l’indicateur téléphonique international.

• Exemple :

begin
ch:=‘0021671002002’;
format_tel (ch) ;
Dbms_Output.Put_Line(‘le numéro de téléphone sans
indicateur international est’ || ch);
End;

• Après l’exécution du bloc, le message suivant sera affiché:

le numéro de téléphone sans indicateur international est : 71002002


8
Exemple : Mettre à jour le salaire
d’un employé (Taux et ID en entrée)
Script modifsalaire.sql

create or replace procedure modifier_salaire (id number, taux number)

Is

Begin
update emp
set salaire=salaire*(1+taux)
where empno= id;

Exception

when no_data_found then


DBMS_OUTPUT.PUT_LINE(‘Employé inconnu : ‘||to_char(id));
9
End;
Compilation de la procédure
modifier_salaire
• Compilation : Pour compiler le script sql ‘modifsalaire.sql’

SQL>start modifsalaire.sql
Procedure created

• Si le script contient des erreurs, la commande show err[ors] permet de visualiser les
erreurs.
SQL>start modifsalaire.sql
Warning: Procedure created with compilation errors

SQL>show err
Errors for Procedure Modifie_salaire

10
Appel et exécution de la procédure
modifier_salaire

 Mode SQLPLUS :

EXECUTE [owner]<nom_proc> (Liste arguments);


Exemple : EXECUTE modifier_salaire(3,10);

 Appel dans un bloc : [owner]<nom_proc> (Liste arguments);

Begin
modifier_salaire (15,-0.5);
End;

11
Les fonctions

• Une fonction est une procédure qui retourne une valeur.

• La seule différence syntaxique se traduit par la présence du mot clé RETURN

• Une fonction précise le type de donnée qu’elle retourne dans son prototype
(signature de la fonction).

• Le retour d’une valeur se traduit par l’instruction RETURN (valeur).

12
Les fonctions : Syntaxe

CREATE [ OR REPLACE ] FUNCTION [<user>] nom_function

(arg1 IN type1 [DEFAULT val_initiale], arg2 ..)

RETURN Type_Retour AS

[ Déclarations des variables locales ]

Begin
//code fonction
Return (val_retour);

Exception

//Gestion des exceptions


End;
13
Exemple : Calculer le nombre
d’employés pour un département donné

CREATE OR REPLACE FUNCTION Funct_Dept (NumD IN dept.deptno%TYPE)


RETURN NUMBER AS

v_NbrEmp NUMBER;
BEGIN

SELECT COUNT(deptno)
INTO v_NbrEmp
FROM emp
WHERE deptno=NumD;
RETURN v_NbrEmp;
END;

14
Appel et exécution de la fonction
Funct_Dept
 Mode SQLPLUS :
Syntaxe :
• EXECUTE var_externe := [owner]<nom_func> (Liste arguments);
• Select [owner]<nom_func> (Liste arguments) from Dual;

Exemple :
• EXECUTE resultat := Funct_Dept(10);
• Select Funct_Dept(10) from Dual;

 Appel dans un bloc PL/SQL :

Begin
resultat := Funct_Dept (10);
DBMS_OUTPUT.PUT_LINE(‘Le nombre d’employés du département
10 est ‘||resultat);
15
End;
Les Packages : Structure générale

CREATE [ OR REPLACE ] Package nom_package IS

//Définitions des types utilisés dans le package (tableau, record,…);


//Déclaration des variables globales;
//constantes
//Exceptions
//Prototypes de toutes les procédures et fonctions du package;

END nom_package;

CREATE [ OR REPLACE ] Package Body nom_package IS

//Définition de la première fonction;


//Définition de la deuxième procédure;
Etc…

End
16 Nom_Package;
Les Packages : Structure générale

• Un package est composé d’un entête et d’un corps :

 L’en tête comporte:


-Les types de données définis
-Les prototypes de toutes les procédures et fonctions
du package.
-Etc.

 Le corps correspond à l’implémentation des procédures et


des fonctions. Chaque procédure est définie avec ses clauses
BEGIN ... END.

• Le premier END marque la fin de l’en tête du package.

• Le deuxième END marque la fin de lu corps du package.


17
Les Package : Fichier Package1.sql

Create or replace Package Gestion_Emp is

Function Recherche_Emp(v_id emp.empno%type) return boolean;

Procedure MisAjour_Salaire(v_id emp.empno%type, v_taux number);

Function Moyenne_Salaire(v_deptno emp.deptno%type) return Number

Procedure Affiche_Emp(v_id emp.empno%type);

End Gestion_Emp;

18
Fichier Package1.sql : suite

Create or replace package Body Gestion_Emp is

Function Recherche_Emp(v_id emp.empno%type) return boolean


Is
V_nom emp.ename%type
Begin
Select ename into v_nom from emp where empno=v_id;
return true;
Exception
Where no_data_found then
Return false;
End

19
Fichier Package1.sql : suite

Procedure Affiche_Emp(v_id emp.empno%type)


As
Begin

If (Recherche_Emp (v_id) ) then

Select * into v_recup from emp where empno=v_id;


Dbms_Output.Put_Line('Lemployé : '|| v_recup.ename|| ‘
occupe le poste'||v_recup.poste || ' salaire : '|| v_recup.salaire
|| 'recruté le :'||v_recup.dateemb);

End if;

End;
20
Fichier Package1.sql : suite

Procedure MisAjour_Salaire (v_id emp.empno%type, v_taux number)


Is
Begin
if(Recherche_Emp (v_id) )then
Update emp set salaire = salaire*(1+v_taux) Where empno=v_id;
End If;
Commit;
End;

Function Moyenne_Salaire(v_deptno emp.deptno%type) return Number


Is
Begin
Select avg(salaire) Into v_moyenne From emp Where deptno=v_deptno;
End;

End;21 // Fin package body


Les package : Explication

• Package Gestion_Emp comporte deux procédures et deux fonctions.

• Compilation:

 SQL> Start package1.sql Package created.


Package body created

• Opérations sur les packages:

 Exécution de la procédure MisAjour_Salaire du package


Gestion_emp :
SQL> begin
Gestion_emp.MisAjour_salaire(4,50);
end; /
PL/SQL procedure successfully completed.
22
Opération sur les packages
 Exécution de la fonction Recherche_Emp du package Gestion_emp :

Declare
Exist boolean;
Begin

Exist := Gestion_emp.Recherche_Emp(8);
If (Exist) then
Dbms_OutPut.Put_Line (‘Employé existant’);
Else
Dbms_OutPut.Put_Line(‘Employé inexistant’);
end; /

On suppose que l’employé avec l’ID 8 existe.

L’affichage à la console sera alors :


PL/SQL procedure successfully completed.
23 Employé Existant

Vous aimerez peut-être aussi