CALL

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

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

CREATE PROCEDURESHOW PROCEDURES

構文

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

必須パラメーター

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

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

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

次の点に注意してください。

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

    引数を名前で指定する場合は、引数名を二重引用符で囲むことはできません。

  • 2つの関数または2つのプロシージャが同じ名前で引数の型が異なり、引数名が異なる場合は、引数名を使ってどの関数またはプロシージャを実行するかを指定することができます。 プロシージャおよび関数のオーバーロード をご参照ください。

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

INTO :snowflake_scripting_variable

指定された Snowflakeスクリプト変数 をストアドプロシージャの戻り値に設定します。

使用上の注意

  • プロシージャ名は、必ずしもスキーマ内で一意ではありません。ストアドプロシージャは、引数タイプと名前によって識別および解決されます(つまり、ストアドプロシージャはオーバーロードできます)。

  • Snowflakeスクリプトのブロック 外では、呼び出しを式の一部にすることはできないため、ストアドプロシージャによって返される値は使用できません。

    Snowflakeスクリプトのブロックでは、 INTO :snowflake_scripting_variable を指定して、ストアドプロシージャからの戻り値をSnowflakeスクリプト変数にキャプチャできます。

  • ストアドプロシージャはアトミックではありません。ストアドプロシージャ内の1つのステートメントが失敗した場合、ストアドプロシージャ内の他のステートメントは必ずしもロールバックされるとは限りません。ストアドプロシージャとトランザクションについては、 トランザクション管理 をご参照ください。

  • CALL (匿名プロシージャの場合) を使用して匿名プロシージャを作成し、呼び出すこともできます。

次の例では、 sv_proc1 という名前のストアドプロシージャを呼び出し、文字列リテラルと数値を入力引数として渡します。例では、引数を位置で指定します。

CALL sv_proc1('Manitoba', 127.4);
Copy

また、引数名で指定することもできます。

CALL sv_proc1(province => 'Manitoba', amount => 127.4);
Copy

次の例は、ストアドプロシージャへの入力引数として セッション変数 を設定して渡す方法を示しています。

SET Variable1 = 49;
CALL sv_proc2($Variable1);
Copy

以下は、Snowflakeスクリプト変数でストアドプロシージャの戻り値をキャプチャするSnowflakeスクリプトのブロックの例です。

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

注: SnowSQL または Classic Console を使用している場合は、代わりに次の例を使用します(SnowSQL および Classic Console でのSnowflakeスクリプトの使用 を参照)。

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

ストアドプロシージャの作成と呼び出しのその他の事例については、 ストアドプロシージャの使用 をご参照ください。