Snowflake Scripting:全变更(待定)¶
启用此行为变更捆绑包后,DML 命令的 Snowflake Scripting 全局变量会做出不同的行为。这些变量在 确定受 DML 命令影响的行数 中进行了说明。
在 Snowflake Scripting 块或存储过程中的最后一个 DML 语句之后执行非 DML 语句时,这些变量的行为如下:
- 变更前:
变量返回最后一个 DML 语句设置的值:
SQLROWCOUNT
– 受最后一个 DML 语句影响的行数。SQLFOUND
–TRUE
或FALSE
基于最后一个 DML 语句。SQLNOTFOUND
–TRUE
或FALSE
基于最后一个 DML 语句。
- 变更后:
变量返回 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