ルーチン: プロシージャー

プロシージャー (ストアード・プロシージャーともいう) は、CREATE PROCEDURE ステートメントを実行することによって作成されるデータベース・オブジェクトです。 プロシージャーは、ロジックおよび SQL ステートメントをカプセル化し、クライアント・アプリケーション、ルーチン、トリガー、動的コンパウンド・ステートメントに対するサブルーチン拡張として機能します。

プロシージャーを呼び出すには、そのプロシージャーへの参照を指定した CALL ステートメントを実行します。 プロシージャーは、入力、出力、および入出力パラメーターをとり、さまざまな SQL ステートメントを実行して、複数の結果セットを呼び出し側に戻すことができます。

フィーチャー
  • 特定のサブルーチン・モジュールを定式化したロジック・エレメントと SQL ステートメントのカプセル化を使用可能にします。
  • クライアント・アプリケーション、他のルーチン、トリガー、および動的コンパウンド・ステートメントなど、CALL ステートメントを実行可能な場所であればどこからでも呼び出せます。
  • 複数の結果セットを戻します。
  • 大きな SQL ステートメントのセットの実行をサポートします。単一パーティション・データベースまたは複数のパーティション・データベースにおいて、表データの読み取りや変更を行う SQL ステートメントの実行がサポートされます。
  • 入力、出力、および入出力パラメーター用のパラメーター・サポート
  • ネストされたプロシージャーの呼び出しおよび関数呼び出しがサポートされます。
  • プロシージャーに対する再帰呼び出しがサポートされます。
  • プロシージャー内でのセーブポイントおよびトランザクション制御がサポートされます。
制限
  • CALL ステートメント以外の SQL ステートメント内からプロシージャーを呼び出すことはできません。 その代わりに、列の値を変換するロジックを記述するために、関数を使用できます。
  • プロシージャー呼び出しの出力パラメーター値および結果セットを別の SQL ステートメントで直接使用することはできません。 アプリケーション・ロジックを使用して、これらを後続の SQL ステートメントで使用可能な変数に割り当てる必要があります。
  • プロシージャーは、 呼び出しと呼び出しの間で状態を保存できません。
一般的な使用法
  • アプリケーション・ロジックの標準化
    • 複数のアプリケーションで、データベースに対して同じような参照、変更操作を実行する場合、 1 つのプロシージャーによって、そのロジックのための統一的なインターフェースを提供できます。 こうして、プロシージャーを再使用することができます。 ビジネス・ロジックの変更に伴ってインターフェースを変更する必要がある場合でも、 その 1 つのプロシージャーを変更するだけで済みます。
  • アプリケーション内のデータベース操作と非データベース・ロジックとの分離
    • プロシージャーは、複数のインスタンスで再使用できる特定のタスクに関連したロジックおよびデータベース・アクセスをカプセル化する、サブルーチンのインプリメンテーションを容易にします。 例えば、従業員管理アプリケーションは、従業員を雇用するタスクに固有のデータベース操作をカプセル化することができます。 この種のプロシージャーでは、複数の表に従業員情報を挿入し、入力パラメーターに基づいて週給を計算して、出力パラメーターとして週給値を戻すことができます。 また別のプロシージャーでは、表内のデータの統計分析を行い、 分析結果を含んだ結果セットを戻すこともできます。
  • SQL ステートメントのグループに対する特権の管理の単純化
    • 複数の SQL ステートメントをグループ化して、1 つの名前付きデータベース・オブジェクトにカプセル化することにより、プロシージャーはデータベース管理者がより少ない特権を管理できるようにします。 データベース管理者は、ルーチン内の各 SQL ステートメントの実行に必要な特権を付与する必要がなくなり、ルーチンを呼び出すための特権を管理するだけですみます。
サポートされるインプリメンテーション
  • すぐに使用可能な組み込みプロシージャーがあります。あるいは、ユーザーがユーザー定義プロシージャーを作成することもできます。 プロシージャーでは、以下のユーザー定義インプリメンテーションがサポートされています。
    • SQL インプリメンテーション
    • 外部インプリメンテーション