ストアドプロシージャおよび UDTFs: 呼び出しで重視される引数名

注意

この動作変更は2023_03バンドルにあります。

バンドルの現在のステータスについては、 バンドル履歴 をご参照ください。

ストアドプロシージャおよびユーザー定義テーブル関数(UDTFs)への呼び出し。呼び出しに名前付き引数が含まれる場合、Snowflakeは以下のように引数の位置よりも引数の名前を優先します。

以前:

名前付き引数を持つプロシージャやユーザー定義テーブル関数(UDTFs)を呼び出す場合、Snowflakeは引数名を無視し、引数の位置を使用してプロシージャや関数に渡される値を決定します。

現在:

プロシージャや UDTFs の呼び出しでは、引数名は引数の位置よりも優先されます。その結果、動作変更前とは異なる次のような動作につながる可能性があります。

  • ストアドプロシージャやユーザー定義テーブル関数の呼び出しで、以前動作していたものがエラーになる場合があります。

  • 引数名が原因で、引数が従来と異なる順序で渡される可能性があります。その結果、エラーが発生したり、間違った結果が出たり、間違ったデータが挿入されたりする可能性があります。

  • 引数名が原因で、同名の異なるストアドプロシージャが呼び出される可能性があります。その結果、エラーが発生したり、間違った結果が出たり、間違ったデータが挿入されたりする可能性があります。

  • 次の例は、2つのストアドプロシージャの呼び出しが、変更前と変更後でどのように異なるかを示しています。

次の例は、2つのストアドプロシージャの呼び出しが、変更前と変更後でどのように異なるかを示しています。

-- One stored procedure
CREATE OR REPLACE PROCEDURE proc(STRARG1 varchar, STRARG2 varchar)
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
BEGIN
  return 'hello';
END
$$;
-- Another procedure
CREATE OR REPLACE PROCEDURE proc(ARG1 number, ARG2 number)
RETURNS BOOLEAN
LANGUAGE SQL
AS
$$
BEGIN
  return ARG1 < ARG2;
END
$$;
-- Example A
-- Before: returns 'hello'
-- After: returns TRUE
CALL PROC(ARG1 => '5', ARG2 => '100');
-- Example B
-- Before: returns TRUE
-- After: returns 'hello'
CALL PROC(STRARG1 => 5, STRARG2 => 100); -- 'hello'.
Copy

参照: 1017