当我尝试使用雪花存储过程执行更改命令时给出错误?

Posted

技术标签:

【中文标题】当我尝试使用雪花存储过程执行更改命令时给出错误?【英文标题】: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 行位置"

【问题讨论】:

【参考方案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 赛,我已经更新了程序。现在它将获取并返回第二个查询的第一行。

以上是关于当我尝试使用雪花存储过程执行更改命令时给出错误?的主要内容,如果未能解决你的问题,请参考以下文章

雪花存储过程给出类似“Uncaught ReferenceError”之类的错误?

Python Glue 作业 - 雪花存储过程未返回确切的错误消息

当我在存储过程中使用相同的公式计算日期时,日期值格式不同 - 雪花

雪花存储在使用抛出错误而不是返回错误时给出不同的错误

当我尝试上传到雪花时,使用 put 命令和 table 阶段出现错误

雪花程序因任务执行而失败