CALL ステートメント
CALL ステートメントは、プロシージャーを呼び出します。 SQL 関数、SQL プロシージャー、または SQL トリガー内の CALL の構文は、 他のコンテキストで CALL ステートメントとしてサポートされているもののサブセットです。
詳しくは、CALLを参照してください。
構文
>>-+--------+--CALL--procedure-name--argument-list------------->< '-label:-' argument-list |--(--+----------------------------------------------+--)-------| | .-,----------------------------------------. | | V | | '---+----------------------+--+-expression-+-+-' '-parameter-name-- => -' +-DEFAULT----+ '-NULL-------'
説明
- label
- CALL ステートメントのラベルを指定します。 このラベル名は、ルーチン名または同じ有効範囲内の別のラベルと同じものにすることはできません。 詳しくは、SQL ラベルの参照を参照してください。
- procedure-name
- 呼び出すプロシージャーを識別します。 このプロシージャー名 は、現行サーバーに存在しているプロシージャーを識別していなければなりません。
- 引数リスト
- パラメーターとしてプロシージャーに渡される値のリストを識別します。
n 番目の名前付きでない引数が、プロシージャー内の n 番目の
パラメーターに対応します。
CREATE PROCEDURE を使用して OUT として定義する各パラメーターは、SQL-variable-name または SQL-parameter-name として指定する必要があります。OUT パラメーターに はデフォルトを指定できません。INOUT パラメーターにデフォルトが使用される 場合、そのデフォルト式は、プロシージャーへの入力用のパラメーターを 初期化するために使用されます。プロシージャーの終了時には、このパラメーターに 対して値は何も戻されません。
プロシージャーが呼び出されるときには、 デフォルト値を持つよう定義されていないすべてのパラメーターに対して引数が指定される 必要があります。名前付き構文を使用して、ある引数がパラメーターに代入される場合、それに続く引数もすべて名前付き構文を使用して代入される必要があります 。
日付、時刻、またはタイム・スタンプの特殊レジスター値への 引数リスト内での参照では、デフォルト式に 1 つのクロック読み取りが使用され、明示的引数内での参照には別のクロック読み取り が使用されます。
指定された引数の数は、指定されたプロシージャー名 を持つ現行のサーバーで定義されたパラメーター数と同じでなければなりません。
アプリケーション・リクエスターは、変数であるパラメーターをすべて INOUT パラメーターと見なします。変数以外のパラメーターは、すべて入力パラメーターであると見なされます。 パラメーターの実際の属性は、現行サーバーによって決定されます。
- parameter-name
- 引数値が割り当てられるパラメーターの名前。この名前は、プロシージャーに定義されているパラメーター名と一致しなければなりません。名前付き引数 は、引数リスト内に指定される順序とは無関係に、同じ名前を持つパラメーターに 対応します。引数が、名前によってパラメーターに割り当てられる場合、それ以降の引数もすべて名前によって割り当てられる必要があります。
- 名前付き引数は、一回だけ (暗黙的または明示的に) 指定される必要があります。
- 名前付き引数は、CREATE PROCEDURE ステートメントを使用して定義されていないプロシージャーの呼び出しでは許可されません。
- expression
- 集約関数または列名を含まない、式で説明されているタイプの expression。
- DEFAULT
- CREATE PROCEDURE ステートメント に定義されたデフォルトがプロシージャーへの引数として使用されることを 指定します。そうでない場合は NULL が使用されます。
- NULL
- NULL 値をプロシージャーへの引数として指定します。
注
OUT および INOUT パラメーターへの引数の規則: 各 OUT または INOUT パラメーターは、 SQL パラメーターまたは SQL 変数として指定する必要があります。
特殊レジスター: プロシージャー内の特殊レジスターの初期値は、 そのプロシージャーの呼び出し元から継承されます。 プロシージャー内で特殊レジスターに割り当てられた値は、その SQL プロシージャー全体で使用され、そのプロシージャーから 呼び出される後続のすべてのプロシージャーで継承されます。 プロシージャーがその呼び出し元に戻るときは、特殊レジスターは 呼び出し元のオリジナルの値に復元されます。
関連情報: 詳しくは、CALLを参照してください。
例
プロシージャー proc1 を呼び出し、SQL 変数をパラメーターとして渡します。
CALL proc1(v_empno, v_salary)