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. |