【问题标题】:when I trying to execute alter command using snowflake stored procedure giving error's?当我尝试使用雪花存储过程执行更改命令时给出错误?
【发布时间】:2021-05-27 14:37:32
【问题描述】:

我使用以下代码创建了存储过程,但出现错误。

CREATE OR REPLACE PROCEDURE testproc()
returns string not null
language javascript
as
$$
var sql_textA = "ALTER SESSION SET TIMEZONE = 'UTC'" ; 
var stmt = snowflake.createStatement({ sqlText: sql_textA}); 
var rs = stmt.execute();
var sql_textb="SELECT CURRENT_TIMESTAMP;"
var stmt = snowflake.createStatement({ sqlText: sql_textA}); 
var rs = stmt.execute();

return "succes";
$$
;

call testproc() 

出现如下错误 "存储过程执行错误:不支持的语句类型 'ALTER_SESSION'。在 Statement.execute 第 4 行位置"

【问题讨论】:

    标签: javascript snowflake-cloud-data-platform snowflake-schema


    【解决方案1】:

    您需要创建具有 CALLER 权限的过程:

    CREATE OR REPLACE PROCEDURE testproc()
    returns string not null
    language javascript
    execute as caller
    as
    $$
    var sql_textA = "ALTER SESSION SET TIMEZONE = 'UTC'" ; 
    var stmt = snowflake.createStatement({ sqlText: sql_textA}); 
    var rs = stmt.execute();
    var sql_textb="SELECT CURRENT_TIMESTAMP;"
    var stmt = snowflake.createStatement({ sqlText: sql_textb}); 
    var rs = stmt.execute();
    
    rs.next();
    
    return rs.getColumnValue(1);
    $$
    ;
    
    call testproc(); 
    

    https://docs.snowflake.com/en/sql-reference/stored-procedures-rights.html#choosing-between-owner-s-rights-and-caller-s-rights

    【讨论】:

    • 感谢您的快速回复。您能帮我使用上述过程返回当前时间戳值吗
    • 如何查看输出值
    • 我觉得你需要输出rs的结果,而不是success
    • 赛,我已经更新了程序。现在它将获取并返回第二个查询的第一行。
    猜你喜欢
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多