Vous êtes sur la page 1sur 19

Les packages PL/SQL

Abir GORRAB
abir.gorrab@sesame.com.tn
Introduction

Un package est similaire à la notion de classe dans


l’orienté objet.

C’est un regroupement des procédures, des fonctions,


des variables, des constantes, des curseurs et des
traitements d’exceptions qui ont un lien logique entre
eux, sous une seule entité.

PL/SQL 2
Introduction

Les procédures et les fonctions peuvent être:

Publiques: PUBLIC: c’est à dire appelées depuis l’extérieur


du package.

Privées: PRIVATE: qui sont invisibles à l’extérieur et


accessibles uniquement à des procédures du même
package.

PL/SQL 3
Organisation d’un Package

Un paquetage est organisé en deux parties distinctes:

Une partie spécification

Une partie corps

PL/SQL 4
Organisation d’un Package

Une partie spécification

Permet de spécifier à la fois les fonctions et procédures


publiques ainsi que les déclarations des types, variables,
constantes, exceptions et curseurs utilisés dans le paquetage et
visibles par le programme appelant.

PL/SQL 5
Organisation d’un Package

Une partie corps

Contient les blocs et les spécifications de tous les objets


publics listés dans la partie spécification.

Cette partie peut inclure des objets qui ne sont pas listés dans
la partie spécification, et sont donc privés.

Cette partie peut également contenir du code qui sera exécuté


à chaque invocation du paquetage par l'utilisateur

PL/SQL 6
Déclaration d’un Package
La déclaration de la partie spécification d'un paquetage
s'effectue avec l'instruction
CREATE [OR REPLACE] PACKAGE

Celle de la partie corps avec l'instruction


CREATE [OR REPLACE] PACKAGE BODY

PL/SQL 7
Déclaration de la partie spécification

Syntaxe :

CREATE [OR REPLACE] PACKAGE nomPaquetage {IS | AS}

[déclaration Type RECORD publique …; ]


[déclaration RECORD publique …; ]
[déclaration EXCEPTION publique …; ]
[déclaration CURSOR publique …; ]
[déclaration Variable Publique …; ]
[déclaration Fonction Publique …; ]
[déclaration Procedure Publique …; ]

END [nomPaquetage];

PL/SQL 8
Déclaration de la partie corps

Syntaxe :
CREATE [OR REPLACE] PACKAGE BODY nomPaquetage
{IS | AS}

[declaration Type Prive …; ]


[declaration Objet Prive …; ]
[definition Fonction Privee …; ]
[definition Procedure Privee …; ]
[instructions Fonction Publique …; ]
[instructionsProcedurePublique …; ]

END [nomPaquetage];

PL/SQL 9
Exemple: Spécification d’un package
Soit la table EMP(empno,name,sal)
CREATE OR REPLACE PACKAGE Pkg_Finance
IS
-- Variables globales et publiques
GN_Salaire EMP.sal%Type ;

-- Fonctions publiques
FUNCTION F_Test_Augmentation
(
PN_Numemp IN EMP.empno%Type
,PN_Pourcent IN NUMBER
) Return NUMBER ;

-- Procédures publiques
PROCEDURE Test_Augmentation
(
PN$Numemp IN EMP.empno%Type -- numéro de l'employé
,PN$Pourcent IN OUT NUMBER -- pourcentage d'augmentation
);
End Pkg_Finance ;
PL/SQL 10
Exemple : Corps d’un package
CREATE OR REPLACE PACKAGE BODY Pkg_Finance IS
-- Variables globales privées
GR_Emp EMP%Rowtype ;

-- Procédure privées
PROCEDUREAffiche_Salaires
IS
-- corps de la procédure
END Affiche_Salaires ;

PL/SQL 11
Exemple : Corps d’un package

-- Fonctions publiques

FUNCTION F_Test_Augmentation (PN_Numemp IN EMP.empno%Type,


PN_Pourcent IN NUMBER 25 )
Return NUMBER
IS
BEGIN

-- corps de la fonction

END F_Test_Augmentation;

PL/SQL 12
Exemple : Corps d’un package
-- Procédures publiques
PROCEDURE Test_Augmentation ( PN_Numemp IN EMP.empno%Type,
PN_Pourcent IN OUT NUMBER)
IS
BEGIN
-- Corps de la procédure publique

-- appel procédure privée


Affiche_Salaires ;
END Test_Augmentation;

END Pkg_Finance;

PL/SQL 13
Organisation d’un Package
La spécification du paquetage est créée avec
une variable globale et publique :GN_Salaire
une procédure publique :PROCEDURE Test_Augmentation
une fonction publique :FUNCTION F_Test_Augmentation
qui sont visibles depuis l'extérieur (le programme appelant)

Le corps du paquetage est créé avec une procédure privée :


PROCEDURE Affiche_Salaires qui n'est visible que dans le corps du
paquetage

Le corps définit également une variable globale au corps du


paquetage :
GR_Emp utilisée par la procédure privée

PL/SQL 14
Référence au contenu d’un Package

Seuls les objets et sous-programmes publics peuvent être


référencés depuis l’extérieur

Syntaxe :
nomPaquetage.nomObjet
nomPaquetage.nomSousProgramme(…)

PL/SQL 15
Accès/Suppression
L'accès à un objet d'un paquetage est réalisé avec la
syntaxe suivante :
nom_paquetage.nom_objet[(liste paramètres)]
L'exécution d'une procédure d'un package s'effectue par
la commande
E X E C U T E nom_package.nom_procédure(liste_paramètres
effectifs) ;
Suppression d’un Package
DROP PACKAGE BODY package_name;
--suppression de la partie corps du package
DROP PACKAGE package_name;
--suppression de la spécification
PL/SQL 16
Accès/Suppression

Les paquetages autorisent la surcharge des noms de fonctions


ou de procédures

Toutes les versions (qui diffèrent par le nombre


et/ou le type des paramètres) doivent être
déclarées dans la section de spécification

Les références seront les mêmes pour les


différentes versions, le choix est fait en fonction
des paramètres effectifs

PL/SQL 17
Recompilation d’un package

Re-compilation d’un paquetage :

Utiliser CREATE OR REPLACE PACKAGE

La modification d’une des sections entraîne la re-compilation


automatique de l’autre section

Affichage des erreurs de compilation avec SQL*Plus :


SHOW ERRORS

PL/SQL 18
Packages prédéfinis

DBMS_OUTPUT : utilisé pour afficher des messages


pendant l'exécution du code

Dbms_output.put_line(‘ok’);

PL/SQL 19