CALL¶
ストアドプロシージャ を呼び出します。
- こちらもご参照ください。
構文¶
CALL <procedure_name> ( [ [ <arg_name> => ] <arg> , ... ] )
[ INTO :<snowflake_scripting_variable> ]
必須パラメーター¶
procedure_name ( [ [ arg_name => ] arg , ... ] )
プロシージャが呼び出すための識別子(
procedure_name
)と入力引数を指定します。名前(
arg_name => arg
)または位置(arg
)のいずれかで入力引数を指定します。次の点に注意してください。
すべての引数を名前または位置のいずれかで指定する必要があります。一部の引数を名前で、他の引数を位置で指定することはできません。
引数を名前で指定する場合は、引数名を二重引用符で囲むことはできません。
2つの関数または2つのプロシージャが同じ名前で引数の型が異なり、引数名が異なる場合は、引数名を使ってどの関数またはプロシージャを実行するかを指定することができます。 プロシージャおよび関数のオーバーロード をご参照ください。
オプションのパラメーター¶
INTO :snowflake_scripting_variable
指定された Snowflakeスクリプト変数 をストアドプロシージャの戻り値に設定します。
例¶
ストアドプロシージャの作成と呼び出しのその他の事例については、 ストアドプロシージャの使用 をご参照ください。
CALL stproc1(5.14::FLOAT);
ストアドプロシージャの各引数は、一般的な式にすることができます。
CALL stproc1(2 * 5.14::FLOAT);
引数はサブクエリにすることができます。
CALL stproc1(SELECT COUNT(*) FROM stproc_test_table1);
CALL ステートメントごとに1つのストアドプロシージャのみを呼び出すことができます。例えば、次のステートメントは失敗します。
CALL proc1(1), proc2(2); -- Not allowed
また、ストアドプロシージャ CALL を式の一部として使用することはできません。例えば、次のステートメントはすべて失敗します。
CALL proc1(1) + proc1(2); -- Not allowed
CALL proc1(1) + 1; -- Not allowed
CALL proc1(proc2(x)); -- Not allowed
SELECT * FROM (call proc1(1)); -- Not allowed
ただし、ストアドプロシージャ内では、ストアドプロシージャは別のストアドプロシージャを呼び出すことも、再帰的に呼び出すこともできます。
注意
ネストされた呼び出しは、許可される最大スタック深度を超える可能性があるため、呼び出しをネストするとき、特に再帰を使用するときは注意してください。
次の例では、 sv_proc1
という名前のストアドプロシージャを呼び出し、文字列リテラルと数値を入力引数として渡します。例では、引数を位置で指定します。
CALL sv_proc1('Manitoba', 127.4);
また、引数名で指定することもできます。
CALL sv_proc1(province => 'Manitoba', amount => 127.4);
次の例は、ストアドプロシージャへの入力引数として セッション変数 を設定して渡す方法を示しています。
SET Variable1 = 49;
CALL sv_proc2($Variable1);
以下は、Snowflakeスクリプト変数でストアドプロシージャの戻り値をキャプチャするSnowflakeスクリプトのブロックの例です。
DECLARE
ret1 NUMBER;
BEGIN
CALL sv_proc1('Manitoba', 127.4) into :ret1;
RETURN ret1;
END;
注意: Snowflake CLI、 SnowSQL、 Classic Console、 execute_stream
、 execute_string
メソッドを Python Connector コードで使用する場合は、代わりにこの例を使用してください(Snowflake CLI、 SnowSQL、 Classic Console、Python ConnectorでSnowflake Scriptingを使用する を参照)。
EXECUTE IMMEDIATE $$
DECLARE
ret1 NUMBER;
BEGIN
CALL sv_proc1('Manitoba', 127.4) into :ret1;
RETURN ret1;
END;
$$
;