Cours SQL ORACLE – 07-08 : PACKAGE

Les PACKAGE sont un ensemble de fonctions et/ou de procédures qui sont regroupés dans un package.

Un PACKAGE est composé de deux parties: l’entête et le corps.

 

 

La structure d’un PACKAGE est comme suit:

CREATE [OR REPLACE] PACKAGE <NOM_PACKAGE> AS

<DECLARATION PROCEDURE ET/OU FUCTION>

END;
/

CREATE [OR REPLACE] PACKAGE BODY <NOM_PACKAGE> AS

<CONTENU PROCEDURE ET/OU FUCTION>

END;
/

La partie entête comporte que la déclaration des procédures et/ou fonctions de ce package.

Alors que la partie corps comporte le corps des procédures et fonctions du package. La partie corps comporte dans sa déclaration le mot clé BODY.




Nous allons créer un package qui va comporter les procedures et fonctions des deux derniers chapitres:

CREATE OR REPLACE PACKAGE PACK_07_08 AS

   PROCEDURE PKG_VERIF_EMP (PARAM1 IN EMP.EMPNO%TYPE);

   FUNCTION PKG_F_VERIF_EMP(PARAM1 IN EMP.EMPNO%TYPE) RETURN NUMBER;

   PROCEDURE PKG_COMPARE_CHAINE (PARAM1 IN VARCHAR2,
                             PARAM2 IN VARCHAR2,
                             RESULTAT OUT VARCHAR2);

   FUNCTION PKG_F_COMPARE_CHAINE (PARAM1 IN VARCHAR2,
                              PARAM2 IN VARCHAR2) RETURN VARCHAR2;

   FUNCTION PKG_F_MAJ_SUP_ESP_CH (PARAM1 IN VARCHAR2)
                                            RETURN VARCHAR2;

END;
/

CREATE OR REPLACE PACKAGE BODY PACK_07_08 AS

   FUNCTION PKG_TEST RETURN NUMBER IS
   BEGIN
      RETURN 1;
   END;

   PROCEDURE PKG_VERIF_EMP (PARAM1 IN EMP.EMPNO%TYPE) IS
      I NUMBER;
   BEGIN
      SELECT 1 INTO I FROM EMP WHERE EMPNO = PARAM1;
      DBMS_OUTPUT.PUT_LINE(PARAM1 || ' existe bien parmi nos employés');
   EXCEPTION WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE(PARAM1 || ' n''existe pas parmi nos employés');
   END;

   FUNCTION PKG_F_VERIF_EMP(PARAM1 IN EMP.EMPNO%TYPE) RETURN NUMBER IS
      I NUMBER;
   BEGIN
      SELECT 1 INTO I FROM EMP WHERE EMPNO = PARAM1;
      RETURN 1;
   EXCEPTION WHEN NO_DATA_FOUND THEN
      RETURN 0;
   END;

   PROCEDURE PKG_COMPARE_CHAINE (PARAM1 IN VARCHAR2,
                             PARAM2 IN VARCHAR2,
                             RESULTAT OUT VARCHAR2) IS
   BEGIN
      RESULTAT := 'FAUX';
      IF UPPER(PARAM1) = UPPER(PARAM2) THEN
         RESULTAT := 'VRAI';
      END IF;
   END;

   FUNCTION PKG_F_COMPARE_CHAINE (PARAM1 IN VARCHAR2,
                              PARAM2 IN VARCHAR2) RETURN VARCHAR2
                              IS
   BEGIN
      IF UPPER(PARAM1) = UPPER(PARAM2) THEN
         RETURN 'VRAI';
      END IF;
      RETURN 'FAUX';
   END;

   PROCEDURE PKG_MAJ_SUP_ESP_CH (PARAM1 IN OUT VARCHAR2) IS
   BEGIN
      PARAM1 := UPPER(PARAM1);
      PARAM1 := REPLACE(PARAM1, ' ', '');
   END;

   FUNCTION PKG_F_MAJ_SUP_ESP_CH (PARAM1 IN VARCHAR2)
                                            RETURN VARCHAR2 IS
      VAR VARCHAR2(4000);
   BEGIN
      VAR := REPLACE(UPPER(PARAM1), ' ', '');
      RETURN VAR;
   END;

END;
/

Le résultat lors de l’exécution de ce code est le suivant:

Package créé.


Corps de package créé.

Nous pouvons faire appel à l’une des fonctions et procédures de ce package comme le montre l’exemple suivant:

SELECT
PACK_07_08.PKG_F_COMPARE_CHAINE('Bonjour COURS SQL', 'Bonjour Cours Sql')
FROM DUAL;

PKG_F_COMPARE_CHAINE('BONJOURCOURSSQL','BONJOURCOURSSQL')
-----------------------------------------------------
VRAI





Enfin, notez qu’on peut créer une fonction ou une procédure dans la partie corps sans la déclarée dans la partie entête du package. Dans ce cas, la fonction ou la procédure créée ne sera accessible que dans les autres fonctions ou procédures du même package à condition que cette fonction ou procédure soit déclaré avant celle qui fait appel à elle.

SELECT
PACK_07_08.PKG_TEST
FROM DUAL;

Error starting at line 1 in command:
SELECT PACK_07_08.PKG_TEST FROM DUAL
Error at Command Line:1 Column:7
Error report:
SQL Error: ORA-00904: "PACK_07_08"."PKG_TEST": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *