ストアード・プロシージャーの呼び出し

データベースに保管されているプロシージャーを呼び出すには、ESQL CALL ステートメントを使用します。 ストアード・プロシージャーは、以下を持つ CREATE PROCEDURE ステートメントによって定義される必要があります。
  • DATABASE の言語文節
  • データベース内のプロシージャーの名前を識別する EXTERNAL NAME 文節。およびオプションで、それが属するデータベース・スキーマ。

CALL ステートメントを使用してストアード・プロシージャーを呼び出すと、ブローカーは、次のように ESQL 定義とデータベース定義を確実に一致させます。

以下の制約事項がストアード・プロシージャーの使用に対して適用されます。

ESQL でのストアード・プロシージャーの作成

データベース・ストアード・プロシージャーに対応する ESQL プロシージャーを定義する場合は、修飾名 (修飾子がデータベース・スキーマである場合) または非修飾名を指定できます。

ストアード・プロシージャーを作成するには、以下のようにします。

  1. 次の例に類似したステートメントをコーディングして、非修飾プロシージャーを作成する。
    CREATE PROCEDURE myProc1(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL NAME "myProc";

    指定する EXTERNAL NAME はデータベースに作成した定義と一致していなければなりませんが、対応する ESQL プロシージャーには任意の名前を指定できます。

  2. 次の例に類似したステートメントをコーディングして、修飾プロシージャーを作成する。
    CREATE PROCEDURE myProc2(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL NAME "Schema1.myProc";
  3. 次の例に類似したステートメントをコーディングして、Oracle パッケージに修飾プロシージャーを作成する。
    CREATE PROCEDURE myProc3(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL
                     NAME "mySchema.myPackage.myProc";
データベースでのストアード・プロシージャーの定義の例については、CREATE PROCEDURE ステートメントを参照してください。

ストアード・プロシージャーの呼び出し

  1. 次の例に類似したステートメントをコーディングして、非修飾プロシージャーを呼び出す。
    CALL myProc1('HelloWorld');

    これはいずれかのスキーマに属するものとして明示的に定義されていないため、myProc1 プロシージャーは、デフォルトのスキーマ (その名前はデータ・ソースへの接続に使用されるユーザー名) 内に存在していなければなりません。そうでない場合、コマンドは失敗します。

  2. 以下の例は、スキーマ Schema1 内の myProc プロシージャーを呼び出します。
    CALL myProc2('HelloWorld');
  3. 次の例に類似したステートメントをコーディングして、動的スキーマを使用した非修飾プロシージャーを呼び出す。
    DECLARE Schema2 char 'mySchema2';
    CALL myProc1('HelloWorld') IN Database.{'Schema2'};

    このステートメントはデフォルトの "username" スキーマをオーバーライドする、データベース Schema2 内の myProc1 プロシージャーを呼び出します。

2 つの結果セットを戻すストアード・プロシージャーの呼び出し

1 つの入力パラメーターを取り、1 つの出力パラメーターと 2 つの結果セットを戻すストアード・プロシージャーを呼び出すには、次のようにします。
  1. 次のようにして、プロシージャーを、1 つの入力パラメーター、1 つの出力パラメーター、2 つの結果セットを指定する CREATE PROCEDURE ステートメントで定義します。
    CREATE PROCEDURE myProc1 (IN P1 INT, OUT P2 INT)
      LANGUAGE DATABASE
      DYNAMIC RESULT SETS 2
      EXTERNAL NAME "myschema.myproc1";
  2. フィールド参照を使用して myProc1 プロシージャーを呼び出すには、以下のようにコーディングします。
    /* using a field reference */
    CALL myProc1(InVar1, OutVar2, Environment.ResultSet1[], OutputRoot.XML.Test.ResultSet2[]);
  3. 参照変数を使用して myProc1 プロシージャーを呼び出すには、以下のようにコーディングします。
    /* using a reference variable*/
    DECLARE cursor REFERENCE TO OutputRoot.XML.Test;
    
    CALL myProc1(InVar1, cursor.OutVar2, cursor.ResultSet1[], cursor.ResultSet2[]);
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ac17040_