有没有办法使用 Snowflake-SQL 重置 Snowflake 会话中的所有 SQL 变量?



当我创建 Snowflake SQL 脚本时,我是会话变量的忠实粉丝,但我缺少重置所有变量的功能。有没有办法用一个命令重置所有会话变量?(类似UNSET ALL SESSION VARIABLES(

根本问题是我发现自己在创建雪花脚本时犯了许多变量声明错误。假设我正在开发两个脚本。在这两个脚本中,我都使用了一个公共变量"var",但我忘了在我的一个脚本中声明它。我目前无法在自己的会话中轻松检测到此错误。

根据文档文档,Snowflake 允许我显示所有变量,并允许我在知道多个变量的标识符时取消设置多个变量。两者的结合是我正在寻找的。

任何建议将不胜感激。

为此可以使用存储过程。

我给你写了一个:

CREATE OR REPLACE PROCEDURE unset_all()
RETURNS STRING
LANGUAGE JAVASCRIPT
EXECUTE AS CALLER
AS
$$
var stmt = snowflake.createStatement({
sqlText: "SHOW VARIABLES",    
});
stmt.execute();
var env_vars=[];
var result1 = stmt.execute();
while(result1.next()) {
env_vars.push(result1.getColumnValue('name'));
}
if (env_vars.length > 0) {
snowflake.createStatement({
sqlText: "UNSET (" + env_vars + ");",    
}).execute();
}
$$;

测试:

SET a = 'a';
SET b = 'b';
SHOW VARIABLES;
CALL unset_all();
SHOW VARIABLES;

请注意,需要EXECUTE AS CALLER才能使其正常工作。

一种有点"丑陋"的方法是取消当前会话:

SET v = 1;
SET i = 'a';
SHOW VARIABLES;
-- v ...
-- i ...
SELECT SYSTEM$ABORT_SESSION(CURRENT_SESSION()::INT);
SHOW VARIABLES;
-- empty

言论:

  • 使用经典UI时,您将立即注销,它将与预览应用程序一起使用
  • 依赖于会话的对象将丢失(未提交的事务/临时表/会话参数等( -谨慎使用!!

最新更新