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;
$$;
- 変更前の戻り値::
+-----------------+
| 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;
$$;
参照: 1850