CALL ステートメントを使用したユーザー作成ルーチンの起動

ESQL CALL ステートメントはルーチンを起動します。 ルーチンとは、以下のいずれかにより定義されているユーザー定義の関数またはプロシージャーのことです。
  • CREATE FUNCTION ステートメント
  • CREATE PROCEDURE ステートメント
注: 標準的なユーザー定義の関数やプロシージャーと同様に、CALL を使用して組み込み (ブローカー提供) 関数やユーザー定義 SQL 関数を起動することもできます。しかし、普通はこれらのタイプの関数は、単にそれらの関数の名前を式で使用する方法で起動されます。
CALL ステートメントを使用して、以下のいずれかの方法でインプリメントされたルーチンを起動することができます。
  • ESQL
  • Java
  • データベース中のストアード・プロシージャーとして
  • 組み込み (ブローカー提供) 関数として。(ただし、組み込み関数の呼び出しについて、上記の注を参照してください。)

CALL ステートメントの構文およびパラメーターの詳細については、CALL ステートメントを参照してください。 CALL の使用例については、CREATE PROCEDURE ステートメントの例を参照してください。

EQSL ルーチンの呼び出し

ルーチンの定義に LANGUAGE 文節として ESQL が指定されているか、またはルーチンが組み込み関数の場合は、ルーチンは ESQL メソッドとして起動されます。

定義と CALL の間で、データ・タイプと個々のパラメーターの方向が正確な 1 対 1 マッチングになっていなければなりません。

ESQL ルーチンを使用して、List および Row 以外の ESQL データ・タイプを戻せます。

Java ルーチンの呼び出し

ルーチンの定義に LANGUAGE 文節として JAVA が指定されている場合は、ルーチンは Java メソッドとして起動されます。

定義と CALL の間で、データ・タイプと個々のパラメーターの方向が正確な 1 対 1 マッチングになっていなければなりません。

Java メソッドの戻りタイプが void の場合は、戻る値がないので、INTO 文節を使用できません。

Java ルーチンは、ESQL から Java へのデータ・タイプ・マッピングの表のデータ・タイプを戻せます。List と Row が除外されていることに注意してください。

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

ルーチンの定義に LANGUAGE 文節として DATABASE が指定されている場合は、ルーチンはデータベース・ストアード・プロシージャーとして起動されます。

データベース・ストアード・プロシージャーが呼び出されると、ブローカーはプロシージャーのローカル名と一致する定義 (CREATE PROCEDURE ステートメントで作成) を検索します。 ブローカーは以下の手順を使用して、データベース内およびそれが属するデータベース・スキーマでプロシージャーを認識するための名前を解決します。

  1. CALL ステートメントが IN 文節を指定する場合、データ・ソースの名前、データベース・スキーマ、またはその両方を IN 文節から取ります。
  2. データ・ソースの名前が CALL ステートメント上の IN 文節で提供されていない場合、それはノードの DATASOURCE 属性から取られます。
  3. データベース・スキーマが CALL ステートメント上の IN 文節では提供されていないものの、CREATE PROCEDURE ステートメントの EXTERNAL NAME 文節上で指定されている場合、それは EXTERNAL NAME 文節から取られます。
  4. データベース・スキーマが CREATE PROCEDURE ステートメントの EXTERNAL NAME 文節上で指定されていない場合、データベースのユーザー名がスキーマ名として使用されます。 一致するプロシージャーが検出されると、ルーチンが起動されます。
CALL ステートメントの IN 文節の主な使用法は、それによりデータ・ソース、データベース・スキーマ、またはその両方を実行時に動的に選択できるようにすることです。
注: CALL ステートメントの IN 文節と同様、EXTERNAL SCHEMA 文節を使用しても、ストアード・プロシージャーを含むデータベース・スキーマを動的に選択できますが、IN 文節ほど柔軟でないので、後方互換性だけのために保存されています。新しいアプリケーションでこの文節を使用することは推奨されていません。

呼び出されるルーチンの定義に DYNAMIC RESULT SETS が指定されている場合、CALL ステートメントの ParameterList 中の式の数はそのルーチンに対する実パラメーターの数と DYNAMIC RESULT SETS の数を加算した数値でなければなりません。例えば、ルーチンに 3 つのパラメーターと 2 つの DYNAMIC RESULT SETS がある場合、CALL ステートメントは呼び出されるルーチンにパラメーターを 5 つ渡さなければなりません。2 つの DYNAMIC RESULT SETS の場合、渡されるパラメーターは、リスト・パラメーターでなければなりません。つまり、配列大括弧 [ ] で修飾されたフィールド参照 (例えば、Environment.ResultSet1[]) でなければなりません。

データベース・ストアード・プロシージャーを使用して、Interval、List および Row 以外の ESQL データ・タイプを戻せます。

関連概念
ESQL の概要
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ac06009_