InterBase クイック スタート:Part V - シンプルな選択プロシージャを作成する

提供: InterBase
移動先: 案内検索

InterBase クイック スタート:Part V - 応用トピック へ戻る


Image 025.jpg シンプルな選択プロシージャを作成する

  1. 次のコードを実行して、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 で、プロシージャの実行を一時停止させ、値を呼び出し側のアプリケーションに送ります。
  2. 次のクエリを入力して、このプロシージャがどのように動作するか見てみましょう:
    SELECT *
    FROM   get_emp_proj(71)
    
    • 最初、テーブル get_emp_proj があるかのように見えますが、プロシージャ名に続いて、括弧内に入力パラメータがありますから、プロシージャであることが分かります。

    結果、次の図のようになっていると思います。

    TutorialPocedure1.png

Image 025.jpg 複雑な選択プロシージャを作成する

  1. この演習では、前のプロシージャを変更して、行数をカウントする出力列を追加します:
    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
    
  2. このプロシージャをテストするには、次のクエリを実行します:
    SELECT *
    FROM   GET_EMP_PROJ2(71)
    

    次のような出力が表示されます:

    TutorialPocedure2.png
  3. すべてが正常に済んだら、ここで作業をコミットしましょう。

次は: