PL/SQL パックの作成

データ・プロジェクト・エクスプローラーで、データ開発プロジェクトから PL/SQL パッケージを作成できます。

始める前に

以下に示すものが作成されたことを確認してください。
  1. PL/SQL をサポートするデータベースへの接続。
  2. プロジェクト。

手順

PL/SQL パッケージを作成するには、以下のようにします。

  1. データ・プロジェクト・エクスプローラーで、スキーマ・オブジェクトを展開します。
  2. PL/SQL パッケージ・フォルダーを選択して「New」>「PL/SQL パッケージ」をクリックします。「新規 PL/SQL パッケージ」ウィザードが開きます。
  3. 「名前」ページで、この PL/SQL パッケージが所属するプロジェクトを指定するか、「新規」をクリックして新規プロジェクトを作成します。
  4. 新規パッケージ名を入力するか、デフォルトの名前を使用します。
  5. 「次へ」を クリックして「サマリー」ページを表示します。
  6. 「完了」をクリックします。 プロジェクト内に新規 PL/SQL パッケージが表示され、PL/SQL パッケージ・エディターが開いて「仕様」および「本体」ページが表示されます。

    パッケージの仕様により、パッケージの外部からどのパッケージ・オブジェクトを参照できるかが設定されます。ルーチンを指定し例外を宣言します。

    パッケージの本体には、パッケージ仕様内で宣言されるすべてのプロシージャーおよび関数のインプリメンテーションが含まれます。

  7. PL/SQL パッケージ仕様および本体を作成します。
    1. 「仕様」ページから、本体によってインプリメントされるルーチンおよび例外を入力します。 例:
      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. 「本体」ページから、ルーチンのインプリメンテーションを入力します。 例:
      --
      --  「emp_admin」パッケージのパッケージ本体。
      --
      CREATE OR REPLACE PACKAGE BODY emp_admin
      IS
         --
         --  部門番号に基づいて「dept」表を照会し、
         --  対応する部門名を返す関数。
         --
         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;
         --
         --  IN パラメーターとして渡される従業員番号および
         --  給与増加/減少に基づいて従業員の給与を
         --  更新する関数。この関数は、正常終了すると
         --  新規に更新された給与を返します。
         --
         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;
         --
         --  新規従業員レコードを「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;
         --
         --  従業員番号に基づいて、「emp」表から従業員レコードを
         --  削除する関数。
         --
         PROCEDURE fire_emp (
            p_empno         NUMBER
         )
         AS
         BEGIN
            DELETE FROM emp WHERE empno = p_empno;
         END;
      END;
  8. パッケージを保存します。

タスクの結果

新規 PL/SQL パッケージには、仕様と本体が含まれます。


フィードバック