当我创建 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时,您将立即注销,它将与预览应用程序一起使用
- 依赖于会话的对象将丢失(未提交的事务/临时表/会话参数等( -谨慎使用!!