InterBase クイック スタート:Part V - シンプルな選択プロシージャを作成する
提供: InterBase
InterBase クイック スタート:Part V - 応用トピック へ戻る
シンプルな選択プロシージャを作成する
- 次のコードを実行して、
get_emp_proj
プロシージャを作成します。CREATE PROCEDURE get_emp_proj (v_empno SMALLINT) returns (project_id CHAR(5)) AS BEGIN FOR SELECT proj_id FROM employee_project WHERE emp_no = :v_empno INTO :project_id DO suspend; END
- コードを読みやすくするため、変数名には、
v_
を前につけるという慣習がありますが、必須ではありません。 - プロシージャは、入力パラメータ(
v_empno
)を取り、その社員が担当しているすべてのプロジェクトを返します(project_id
、RETURNS の後に指定)。変数はヘッダーで定義され、それから、本体で :<varname> の形式で参照されます。 - プロシージャは
FOR SELECT … DO
文を使用すると、Employee_project
テーブルから複数行を抽出することができます。この文は、値を通常のSELECT
文が行うのと同じように抽出しますが、それらを一度に一つずつ抽出してINTO
の後に列挙されている変数に入れ、その後、DO
に続く文を実行します。 このケースでは、文のみなのはSUSPEND
で、プロシージャの実行を一時停止させ、値を呼び出し側のアプリケーションに送ります。
- コードを読みやすくするため、変数名には、
- 次のクエリを入力して、このプロシージャがどのように動作するか見てみましょう:
SELECT * FROM get_emp_proj(71)
- 最初、テーブル
get_emp_proj
があるかのように見えますが、プロシージャ名に続いて、括弧内に入力パラメータがありますから、プロシージャであることが分かります。
結果、次の図のようになっていると思います。
- 最初、テーブル
複雑な選択プロシージャを作成する
- この演習では、前のプロシージャを変更して、行数をカウントする出力列を追加します:
CREATE PROCEDURE get_emp_proj2 (v_empno SMALLINT) returns (line_no INTEGER, project_id CHAR(5)) AS BEGIN line_no = 0; FOR SELECT proj_id FROM employee_project WHERE emp_no = :v_empno INTO :project_id DO BEGIN line_no = line_no+1; suspend; END END
- このプロシージャをテストするには、次のクエリを実行します:
SELECT * FROM GET_EMP_PROJ2(71)
次のような出力が表示されます:
- すべてが正常に済んだら、ここで作業をコミットしましょう。