Création de packages PL/SQL

Vous pouvez créer un package PL/SQL dans un projet de développement de données à partir de l'explorateur de projets de données.

Avant de commencer

Vérifiez que les éléments suivants sont créés :
  1. Une connexion à une base de données prenant en charge PL/SQL.
  2. Un projet.

Procédure

Pour créer un package PL/SQL :

  1. Dans l'explorateur de projets de données, développez un objet de schéma.
  2. Sélectionnez le dossier Packages PL/SQL, puis cliquez sur Nouveau > Package PL/SQL. L'assistant Nouveau package PL/SQL s'ouvre.
  3. Sur la page Nom, indiquez le projet dans lequel figure le package PL/SQL ou cliquez sur Nouveau pour créer un projet.
  4. Entrez le nom du nouveau package ou utilisez le nom par défaut.
  5. Cliquez sur Suivant pour afficher la page Récapitulatif.
  6. Cliquez sur Terminer. Le nouveau package PL/SQL apparaît dans le projet et l'éditeur Package PL/SQL s'ouvre, affichant les pages Spécification et Corps.

    La spécification du package définit les objets du package pouvant être référencés en dehors de ce dernier ; elle spécifie les routines et déclare les exceptions.

    Le corps du package contient l'implémentation de toutes les procédures et fonctions déclarées dans la spécification du package.

  7. Créez la spécification et le corps du package PL/SQL.
    1. Dans la page Spécification, entrez les exceptions et routines à implémenter via le corps. Par exemple :
      CREATE OR REPLACE PACKAGE emp_admin
      IS
      
         FUNCTION get_dept_name (
            p_deptno        NUMBER DEFAULT 10
         )
         RETURN VARCHAR2;
         FUNCTION update_emp_sal (
            p_empno         NUMBER,
            p_raise         NUMBER
         )
         RETURN NUMBER;
         PROCEDURE hire_emp (
            p_empno         NUMBER,
            p_ename         VARCHAR2,
            p_job           VARCHAR2,
            p_sal           NUMBER,
            p_hiredate      DATE DEFAULT sysdate,
            p_comm          NUMBER DEFAULT 0,
            p_mgr           NUMBER,
            p_deptno        NUMBER DEFAULT 10
         );
         PROCEDURE fire_emp (
            p_empno         NUMBER
    2. Dans la page Corps, entrez les implémentations des routines. Par exemple :
      --
      --  Corps du package 'emp_admin'.
      --
      CREATE OR REPLACE PACKAGE BODY emp_admin
      IS
         --
         --  Fonction interrogeant la table 'dept' en fonction du numéro
         --  de département et renvoie le nom du département correspondant.
         --
         FUNCTION get_dept_name (
            p_deptno        IN NUMBER DEFAULT 10
         )
         RETURN VARCHAR2
         IS
            v_dname         VARCHAR2(14);
         BEGIN
            SELECT dname INTO v_dname FROM dept WHERE deptno = p_deptno;
            RETURN v_dname;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               DBMS_OUTPUT.PUT_LINE('Invalid department number ' || p_deptno);
               RETURN '';
         END;
         --
         --  Fonction mettant à jour le salaire d'un employé en fonction
         --  du matricule et de l'augmentation/la diminution de salaire définis
         --  en tant que paramètres IN.  Une fois terminée avec succès, la fonction
         --  renvoie le nouveau salaire mis à jour.
         --
         FUNCTION update_emp_sal (
            p_empno         IN NUMBER,
            p_raise         IN NUMBER
         )
         RETURN NUMBER
         IS
            v_sal           NUMBER := 0;
         BEGIN
            SELECT sal INTO v_sal FROM emp WHERE empno = p_empno;
            v_sal := v_sal + p_raise;
            UPDATE emp SET sal = v_sal WHERE empno = p_empno;
            RETURN v_sal;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               DBMS_OUTPUT.PUT_LINE('Employee ' || p_empno || ' not found');
               RETURN -1;
            WHEN OTHERS THEN
               DBMS_OUTPUT.PUT_LINE('The following is SQLERRM:');
               DBMS_OUTPUT.PUT_LINE(SQLERRM);
               DBMS_OUTPUT.PUT_LINE('The following is SQLCODE:');
               DBMS_OUTPUT.PUT_LINE(SQLCODE);
               RETURN -1;
         END;
         --
         --  Procédure insérant un nouvel enregistrement d'employé dans la table 'emp'.
         --
         PROCEDURE hire_emp (
            p_empno         NUMBER,
            p_ename         VARCHAR2,
            p_job           VARCHAR2,
            p_sal           NUMBER,
            p_hiredate      DATE DEFAULT sysdate,
            p_comm          NUMBER DEFAULT 0,
            p_mgr           NUMBER,
            p_deptno        NUMBER DEFAULT 10
         )
         AS
         BEGIN
            INSERT INTO emp(empno, ename, job, sal, hiredate, comm, mgr, deptno)
               VALUES(p_empno, p_ename, p_job, p_sal,
                      p_hiredate, p_comm, p_mgr, p_deptno);
         END;
         --
         --  Procédure supprimant un enregistrement d'employé à partir de la table 'emp'
         --  en fonction du matricule.
         --
         PROCEDURE fire_emp (
            p_empno         NUMBER
         )
         AS
         BEGIN
            DELETE FROM emp WHERE empno = p_empno;
         END;
      END;
  8. Sauvegardez le package.

Résultats

Le nouveau package PL/SQL contient une spécification et un corps.


Commentaires