Sunday 26 June 2011

les Packages PL/SQL

Oracle PL-SQL : Utilisation des Packages

Oracle PL-SQL : Utilisation des Packages

Un package permet de stocker dans le meme objet , un ensemble de procedure, fonction, curseur, triggers
afin de permettre une bonne gestion des objets d'un utilisateur.
dans cette exemple, je vous montre un package avec une fonction et une procedure
à l'éxecution, l'appel de la fonction ou bien de la procedure est indixé par le nom du package
Nompackage.nomFonctoin.

 
SQL> SET SERVEROUTPUT ON
SQL> CREATE OR REPLACE PACKAGE PkTeste 
    IS
         
  TYPE Typ_rec IS RECORD
 (Nom employe.empnom%TYPE,
  Fonction employe.fonction%TYPE);
 -- declaration du type tableau pour les noms et fonctions  
  TYPE TypeFonct IS TABLE OF Typ_rec 
  INDEX BY BINARY_INTEGER; 
 TabFonc TypeFonct;
 AucuneFonct EXCEPTION; 
 --déclaration de la fonction qui retourne les fonctions des employés
 -- ayant un certain salaire fourni en paramétre
 FUNCTION FonctionEmp (Salaire NUMBER DEFAULT 1500)  
  RETURN  TypeFonct;
PROCEDURE AffichageResFct;
 END PkTeste;
 /
 
  CREATE OR REPLACE PACKAGE BODY PkTeste
 IS
 FUNCTION FonctionEmp (Salaire NUMBER DEFAULT 1500)
  RETURN  TypeFonct
  IS
  CURSOR CurFoncEmp
   IS
   SELECT empnom,fonction
   FROM employe
   WHERE sal=Salaire;
  Indice BINARY_INTEGER:=1;
 BEGIN
  FOR EnrCur in CurFoncEmp
   LOOP
    -- chargement du tableau à partir du curseur
    TabFonc(Indice).Nom:=EnrCur.empnom;
    TabFonc(Indice).Fonction:=EnrCur.fonction;
    Indice:=Indice+1;
   END LOOP;
  RETURN TabFonc;
 END FonctionEmp;
 
PROCEDURE AffichageResFct
IS
BEGIN
--appel de la fonction avec valeur par defaut
TabFonc:=FonctionEmp;
--affichage des noms et fonctions des employés
IF TabFonc.COUNT=0 THEN
  RAISE AucuneFonct;
 ELSE 
  DBMS_OUTPUT.PUT_LINE('Les employés touchant le salaire de 1500 occupent les fonctions');
  DBMS_OUTPUT.PUT_LINE('   Nom         '||'  Fonction ');
  DBMS_OUTPUT.PUT_LINE('******************************');
  FOR Ind IN 1 ..TabFonc.COUNT
    LOOP
    DBMS_OUTPUT.PUT_LINE(TabFonc(Ind).Nom||' '||TabFonc(Ind).Fonction);
    END LOOP; 
 END IF;
--appel de la fonction avec la valeur 2500
TabFonc:=FonctionEmp(2500);
--affichage des fonctions des employés
IF TabFonc.COUNT=0 THEN
  RAISE AucuneFonct;
 ELSE
  DBMS_OUTPUT.PUT_LINE('Les employes touchant le salaire  de 2500 ' 
    ||' occupent les fonctions');
  DBMS_OUTPUT.PUT_LINE('   Nom         '||'  Fonction ');
  DBMS_OUTPUT.PUT_LINE('******************************');
  FOR Ind IN 1 ..TabFonc.COUNT
    LOOP
    DBMS_OUTPUT.PUT_LINE(TabFonc(Ind).Nom||'    '||TabFonc(Ind).Fonction);
    END LOOP; 
 END IF;
EXCEPTION  
 WHEN AucuneFonct THEN
 DBMS_OUTPUT.PUT_LINE('Il n''y a aucun employé qui touche ce salaire ');
END AffichageResFct;
END PkTeste;
 
PL/SQL  successfully completed.

No comments:

Post a Comment