BTEQまたはCLIv2から実行する呼び出し引数には、以下のルールが当てはまります。
- IN引数またはINOUT引数は、値式でなければなりません。
- IN引数またはINOUT引数として使用する値式の中で、コロン(:)を先頭に付けた識別子があれば、その識別子は、CALLを備えた文のUSING句と関連付けられているUSING変数を参照しなければなりません。式の値は、呼び出すプロシージャ内の対応するパラメータの入力値として処理されます。
- OUT引数は、次のいずれかにすることができます。
- 出力ホスト変数。
- 疑問符などのプレースホルダー。
- プロシージャ定義で指定されているOUTパラメータ名以外の任意の名前。
- これらのルールは、?パラメータの使用に適用されます。
以下のプロシージャ呼び出しは、パラメータp1およびresutl_1の情報としてAMBIGUOUS、AMBIGUOUSを返します。このとき、実行段階でp1パラメータの結果となる型を決定するパラメータresult_1について詳細な情報が得られることが期待されます。
CALL xsp2 (?, ?);
以下のプロシージャ呼び出しは、result_1パラメータが返すデータ型に関する詳細な情報が期待されないため失敗します。
CALL xsp1 (?, ?);
以降の例は、BTEQから発行されるCALL文内のOUTパラメータ名のさまざまな指定の仕方を示しています。これらの例は、以下のCREATE PROCEDURE文をベースとしています。
CREATE PROCEDURE sp2 (OUT po1 INTEGER) BEGIN SET :po1 = 20; END;
以下のCALL文で、OUT引数名p1は、プロシージャ定義に指定されているOUTパラメータ名po1とは異なっています。
CALL sp2(p1); *** Procedure has been executed. *** Total elapsed time was 1 second.
同じCALL文は、以下の2つの例が示すとおり、明示的なパラメータ指定の代わりにプレースホルダー文字またはホスト変数を指定する場合にも機能します。
CALL sp2(?); *** Procedure has been executed. *** Total elapsed time was 1 second. CALL sp2(:tx1); *** Procedure has been executed. *** Total elapsed time was 1 second.