在创建Snowflake SQL脚本时,我是会话变量的铁杆粉丝,但我缺少重置所有变量的功能。有没有办法用一个命令重置所有会话变量?(类似于UNSET ALL SESSION VARIABLES)
潜在的问题是,我发现自己在创建Snowflake脚本时犯了许多变量声明错误。假设我正在开发两个脚本。在这两个脚本中,我都使用了一个公共变量"var",但我忘记在其中一个脚本中声明它。我目前无法在我自己的会话中轻松检测到这个错误。
根据文档documentation,雪花允许我显示所有变量,并允许我取消设置多个变量(如果我知道它们的标识符)。这两者的结合就是我想要的。
任何建议都将不胜感激。
发布于 2020-09-11 13:07:12
为此,您可以使用存储过程。
我为你写了一个:
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才能使其正常工作。
发布于 2021-05-04 04:31:44
一种有点“丑陋”的方法是取消当前会话:
SET v = 1;
SET i = 'a';
SHOW VARIABLES;
-- v ...
-- i ...
SELECT SYSTEM$ABORT_SESSION(CURRENT_SESSION()::INT);
SHOW VARIABLES;
-- empty备注:
使用经典UI时,您将立即注销,它将与依赖于会话的PreviewApp
一起使用
https://stackoverflow.com/questions/62027850
复制相似问题