CALL

ストアド プロシージャを実行します。

構文:

>>--EXEC SQL--.--------------------.--.----------------.->
              +-FOR :host_integer--+  +- :result_hvar -+

 >---CALL stored_procedure_name-.------------.-END-EXEC-><
                                | +-- , --+  |
                                | V       |  |
                                +(parameter)-+

パラメーター:

host_integer 処理されるホスト配列要素の最大数を指定するホスト変数。PIC S9(4) COMP-5 または PIC S9(9) COMP-5 として宣言する必要があります。
result_hvar プロシージャ結果を受け取るホスト変数。
stored_procedure_name ストアド プロシージャの名前。
parameter 次の形式のリテラル、DECLARE CURSOR 文1、またはホスト変数パラメーター。
[keyword=]:param_hvar [IN | INPUT | 
INOUT | OUT | OUTPUT]

各要素を次に示します。

keyword2 キーワード パラメーターの正式なパラメーター名。キーワード パラメーターは、読みやすさという点で有用であり、サーバーがデフォルトのパラメーター値とオプションのパラメーターをサポートしている場合にも役に立ちます。
param_hvar ホスト変数。
IN 入力パラメーター。
INPUT 入力パラメーター (デフォルト値)。
INOUT 入力/出力パラメーター。
OUT 出力パラメーター。
OUTPUT 出力パラメーター。

1 DECLARE CURSOR を指定するのは、Oracle 8 以降で、結果セットを返すストアド プロシージャに対してのみです。DECLARE CURSOR を使用すると、対応するパラメーターのバインドが解除されます。

2 HCOSS はキーワード パラメーターをサポートしていません。

コメント:

CALL が DECLARE CURSOR 文の一部である場合は、FOR 句を使用しないでください。

最大限の移植性を確保するには、次の一般規則に従ってください。
  • リテラルなパラメーターの使用を避ける
  • ホスト変数のパラメーターを使用する
  • 位置指定パラメーターとキーワード パラメーターを併用しない
  • 位置指定パラメーターとキーワード パラメーターの併用がサーバーでサポートされている場合は、キーワード パラメーターを位置指定パラメーターの後に置く

例:

2 つの位置指定ホスト変数を入力パラメーターとして使用してストアド プロシージャを呼び出します。
   EXEC SQL
      CALL myProc(param1,param2)
   END-EXEC
キーワード ホスト変数を入力パラメーターとして使用してストアド プロシージャを呼び出します。
   EXEC SQL 
      CALL myProc (namedParam=:paramValue) 
   END-EXEC
結果のホスト変数と、入力パラメーターとしてのキーワード ホスト変数を使用して、ストアド プロシージャを呼び出します。
   EXEC SQL
      :myResult = CALL myFunction(namedParam=:paramValue)
   END-EXEC
2 つの位置指定ホスト変数を、1 つは入力パラメーターとして、もう 1 つは出力パラメーターとして使用して、ストアド プロシージャを呼び出します。
   EXEC SQL
      CALL getDept(:empName IN, :deptName OUT)
   END-EXEC
DECLARE CURSOR 文と、入力パラメーターとしての位置指定ホスト変数を使用して、ストアド プロシージャを呼び出します (Oracle のみ)。
   EXEC SQL
      DECLARE cities CURSOR FOR CALL locateStores(:userState)
   END-EXEC