如何更改 Snowflake 存储过程中的会话参数

Posted

技术标签:

【中文标题】如何更改 Snowflake 存储过程中的会话参数【英文标题】:How to alter session parameters within a Snowflake stored procedure 【发布时间】:2020-07-22 18:32:20 【问题描述】:

我正在使用存储过程构建日期维度,并且需要更改会话参数 WEEK_START 以确保正确计算某些值。在这个主题上,Snowflake 文档主要集中在区分调用者和所有者权限,但暗示这应该是可能的。但是,调用下面定义的过程时得到的结果是:“失败:存储过程执行错误:不支持的语句类型'ALTER_SESSION'。”

CREATE OR REPLACE PROCEDURE PUBLIC.USP_ALTER_SESSION_TEST(BATCH_ID float)
returns string
language javascript
as
$$
    var sql_session,
        sql_test,
        stmt_session,
        stmt_test;
  
    sql_session = "ALTER SESSION SET WEEK_START = 1;";
    sql_test = "SELECT DAYOFWEEK(CURRENT_DATE());";
      
    try 
    
        stmt_session = snowflake.createStatement( sqlText: sql_session );
        stmt_session.execute ();
        
        stmt_test = snowflake.createStatement( sqlText: sql_test );
        stmt_test.execute ();
        
        return "Succeeded.";
    
    catch (err)  
    
        return "Failed: " + err;
    
$$
;

【问题讨论】:

【参考方案1】:

作为所有者执行时,有些东西不是。调用者执行允许周开始。将 EXECUTE AS CALLER 添加到定义中,它应该可以工作。

【讨论】:

以上是关于如何更改 Snowflake 存储过程中的会话参数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Snowflake Javascript 存储过程或函数遍历表中的所有列?

Snowflake中的数据库更改检测过程

在 Snowflake 中处理多个 SQL 语句的存储过程

使用 Snowflake 中的任务调用存储过程

Snowflake 存储过程中的最大 JavaScript 字符串大小

在 SnowFlake DB 中并行执行存储过程中的 SQL 语句