CALL

ストアドプロシージャ を呼び出します。

こちらもご参照ください。

CREATE PROCEDURESHOW PROCEDURES

構文

CALL <procedure_name> ( [ [ <arg_name> => ] <arg> , ... ] )
  [ INTO :<snowflake_scripting_variable> ]

必須パラメーター

procedure_name ( [ [ arg_name => ] arg , ... ] )

プロシージャが呼び出すための識別子(procedure_name)と入力引数を指定します。

名前(arg_name => arg)または位置(arg)のいずれかで入力引数を指定します。

注釈

  • すべての引数を名前または位置のいずれかで指定する必要があります。一部の引数を名前で、他の引数を位置で指定することはできません。

  • When you specify an argument by name, you can't use double quotes around the argument name.

  • If two procedures have the same name but different argument types, you can use the argument names to specify which procedure to execute, if the argument names are different. For more information, see プロシージャおよび関数のオーバーロード.

オプションのパラメーター

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;

Note: If you use Snowflake CLI, SnowSQL, the Classic Console, or the execute_stream or execute_string method in Python Connector code, use this example instead (see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector):

EXECUTE IMMEDIATE $$
DECLARE
  ret1 NUMBER;
BEGIN
  CALL sv_proc1('Manitoba', 127.4) into :ret1;
  RETURN ret1;
END;
$$
;