Snowflake Scripting: グローバル変数の変更(保留中)

注意

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

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

この動作変更バンドルが有効な場合、 DML コマンド用のSnowflake Scriptingグローバル変数の動作が異なります。これらの変数については、 DML コマンドの影響を受ける行数の決定 で説明しています。

Snowflake Scriptingブロックまたはストアドプロシージャの最後の DML ステートメントの後に DML 以外のステートメントが実行されると、これらの変数は次のように動作します。

変更前:

変数は、最後の DML ステートメントで設定された値を返します。

  • SQLROWCOUNT - 最後の DML ステートメントの影響を受けた行の数。

  • 最後の DML ステートメントに基づく SQLFOUND - TRUE または、 FALSE

  • 最後の DML ステートメントに基づく SQLNOTFOUND - TRUE または、 FALSE

変更後:

変数は NULL を返します。

例えば、次のSnowflake Scripting匿名ブロックは、変更前と変更後で異なる値を返します。

EXECUTE IMMEDIATE
$$
BEGIN
  CREATE OR REPLACE TABLE test_snowflake_scripting_gv (i INT);
  INSERT INTO test_snowflake_scripting_gv VALUES (1);
  SELECT 1;
  RETURN SQLROWCOUNT;
END;
$$;
Copy
変更前の戻り値::
+-----------------+
| anonymous block |
|-----------------|
|               1 |
+-----------------+
変更後の戻り値::
+-----------------+
| anonymous block |
|-----------------|
|            NULL |
+-----------------+

変更後に以前の動作を実現するには、以降の DML 以外のステートメントの前に、Snowflake Scriptingグローバル変数の値を新しい変数に保存し、新しい変数の値を返します。例:

EXECUTE IMMEDIATE
$$
BEGIN
  LET sql_row_count_var := 0;
  CREATE OR REPLACE TABLE test_snowflake_scripting_gv (i INT);
  INSERT INTO test_snowflake_scripting_gv VALUES (1);
  sql_row_count_var := SQLROWCOUNT;
  SELECT 1;
  RETURN sql_row_count_var;
END;
$$;
Copy

参照: 1850