0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SQL】パッケージ

Posted at

パッケージ

パッケージとは

パッケージは、関連するPL/SQLオブジェクト(プロシージャ、ファンクション、変数、カーソルなど)を一つにまとめたコンテナです。パッケージを使用することで、コードのモジュール化、再利用性、保守性が向上します。

パッケージの構成

パッケージは、パッケージ仕様(宣言部)とパッケージ本体(実装部)の2つの部分から構成されます。

  1. パッケージ仕様(宣言部): パッケージ内の公開メンバー(プロシージャ、ファンクション、変数など)を宣言します。
  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;

パッケージの利点

  • モジュール化: 関連するプロシージャやファンクションを一つにまとめ、管理しやすくする。
  • 再利用性: 一度作成したパッケージを他のプログラムから簡単に呼び出せる。
  • 保守性: パッケージ本体を変更しても、パッケージ仕様に変更がなければ依存するプログラムを再コンパイルする必要がない。
  • 効率性: パッケージ内のコードは一度メモリにロードされると、以降の呼び出しは高速になる。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?