en PL/SQL
1
Plan
2
Introduction
• Une procédure est un bloc PL/SQL nommé sans valeur de retour stocké sur le
serveur oracle
• 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
• Les packages sont utilisés par les programmes clients comme de simples librairies
distantes sur le serveur
3
Les procédures : Syntaxe
AS ou Is
Begin
//code de la procedure
Exception
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
BEGIN
v_tel := substr(v_tel,6,8);
END ;
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;
Is
Begin
update emp
set salaire=salaire*(1+taux)
where empno= id;
Exception
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 :
Begin
modifier_salaire (15,-0.5);
End;
11
Les fonctions
• Une fonction précise le type de donnée qu’elle retourne dans son prototype
(signature de la fonction).
12
Les fonctions : Syntaxe
RETURN Type_Retour AS
Begin
//code fonction
Return (val_retour);
Exception
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;
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
END nom_package;
End
16 Nom_Package;
Les Packages : Structure générale
End Gestion_Emp;
18
Fichier Package1.sql : suite
19
Fichier Package1.sql : suite
End if;
End;
20
Fichier Package1.sql : suite
• Compilation:
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; /