パッケージ
パッケージとは
パッケージは、関連するPL/SQLオブジェクト(プロシージャ、ファンクション、変数、カーソルなど)を一つにまとめたコンテナです。パッケージを使用することで、コードのモジュール化、再利用性、保守性が向上します。
パッケージの構成
パッケージは、パッケージ仕様(宣言部)とパッケージ本体(実装部)の2つの部分から構成されます。
- パッケージ仕様(宣言部): パッケージ内の公開メンバー(プロシージャ、ファンクション、変数など)を宣言します。
- パッケージ本体(実装部): パッケージ仕様で宣言されたメンバーの実装を定義します。
パッケージの作成
例: パッケージ仕様の作成
CREATE OR REPLACE PACKAGE employee_pkg IS
PROCEDURE update_salary(p_emp_id IN NUMBER, p_new_salary IN NUMBER);
FUNCTION get_salary(p_emp_id IN NUMBER) RETURN NUMBER;
END employee_pkg;
例: パッケージ本体の作成
CREATE OR REPLACE PACKAGE BODY employee_pkg IS
-- プロシージャの実装
PROCEDURE update_salary(p_emp_id IN NUMBER, p_new_salary IN NUMBER) IS
BEGIN
UPDATE employees
SET salary = p_new_salary
WHERE employee_id = p_emp_id;
END update_salary;
-- ファンクションの実装
FUNCTION get_salary(p_emp_id IN NUMBER) RETURN NUMBER IS
v_salary employees.salary%TYPE;
BEGIN
SELECT salary INTO v_salary
FROM employees
WHERE employee_id = p_emp_id;
RETURN v_salary;
END get_salary;
END employee_pkg;
例: パッケージの使用
DECLARE
v_salary NUMBER;
BEGIN
-- パッケージのプロシージャを呼び出し
employee_pkg.update_salary(101, 5000);
-- パッケージのファンクションを呼び出し
v_salary := employee_pkg.get_salary(101);
DBMS_OUTPUT.PUT_LINE('Updated Salary: ' || v_salary);
END;
パッケージの利点
- モジュール化: 関連するプロシージャやファンクションを一つにまとめ、管理しやすくする。
- 再利用性: 一度作成したパッケージを他のプログラムから簡単に呼び出せる。
- 保守性: パッケージ本体を変更しても、パッケージ仕様に変更がなければ依存するプログラムを再コンパイルする必要がない。
- 効率性: パッケージ内のコードは一度メモリにロードされると、以降の呼び出しは高速になる。