CALL
CALLステートメントは、SQLスクリプトでプロシージャを呼び出すために使用されます。
構文
CALL <procedureName> ( [<valueExpression>[,…]] )]
<procedureName> は、プロシージャ宣言の構文を使用して宣言されたプロシージャの名前を参照します。プロシージャの宣言については、SQL Script Procedure Headerを参照してください。
パラメーターがない場合、CALL構文の括弧は必要ありません。
備考
| • | IN パラメーターには、任意の値式を渡すことができます。詳細については、「 値式」を参照してください。式は、必要に応じて、IN パラメーターのタイプと一致するように暗黙的にキャストされます。 IN パラメーターは、リテラル、式、または変数にすることができます。 IN パラメーターが変数の場合、値は変更されません。 PIPE 修飾子 ( PIPE修飾子) を持つ IN パラメーターは、PIPE 変数でもある変数のみを渡すことができます。これは、PIPE 修飾子を持つ現在のプロシージャの IN または OUT パラメーターのみを渡すことができることを意味します。 |
| • | IN パラメーターに渡される式は、左から右に評価されます。 |
| • | INOUT および OUT パラメーターには、適切なタイプの変数を渡す必要があります。暗黙的なタイプ変換はサポートされていません。 INOUT パラメーターの場合、プロシージャで値が変更されない限り、値は変更されません。 OUT パラメーターの場合、プロシージャで変更されていない場合、値は NULL に設定されます。 PIPE 修飾子を持つ OUT パラメーターには、PIPE と同じカーソル タイプのカーソル変数のみを渡すことができます。 |
例
PROCEDURE square (IN x INTEGER, OUT result INTEGER)
BEGIN
SET result = x * x;
END
PROCEDURE p( )
BEGIN
DECLARE y INTEGER;
CALL square(2, y);
-- y is 4
CALL sqaure(y, y);
-- y is 16
END
PROCEDURE factorial (IN x INTEGER, OUT result INTEGER)
BEGIN
IF x = 1 THEN
SET result = 1;
ELSE
CALL /shared/factorial(x-1; result);
SET result = x * result;
END