无法在雪花数据库中运行存储过程

时间:2018-11-27 14:12:53

标签: stored-procedures snowflake-datawarehouse snowflake

CREATE OR REPLACE PROCEDURE wh.sp_schema.my_sp(arg1 STRING, arg2 STRING)
RETURNS VARCHAR(16777216)
LANGUAGE JAVASCRIPT
AS 
$$
 stmt = snowflake.createStatement(
  {sqlText: `CREATE OR REPLACE TABLE wh.table_schema.RAW_`+arg2+`_`+arg1+` LIKE wh.temp_schema.RAW_`+arg2+`_TEMPLATE`}
  );
rs = stmt.execute();
rs.next();
output = rs.getColumnValue(1);
return output;
$$
;

当我创建上述存储过程时-显示以下消息

Function my_sp successfully created.

当我使用工作表运行存储过程时

CALL my_sp('2018','abc');

我看到以下错误:

SQL compilation error: Invalid identifier my_sp

我什至尝试使用存储过程的完全限定名称来运行:

CALL wh.sp_schema.my_sp('2018','abc');

我仍然看到以下错误:

SQL compilation error: Invalid identifier my_sp.

此外,我想知道一个命令来查看我的存储过程是否已创建。 我已经在“ wh”仓库和“ sp_schema”模式下的雪花UI中进行了查看,但是除了表之外,看不到其他任何东西(存储过程)。

4 个答案:

答案 0 :(得分:0)

Snowflake不支持基于Stored Procedures. They are implementing javascript`的API,但仍处于草稿模式。

此处是其API的link(注意<草稿文档写在右侧)。

这是他们在支持论坛上确认的票证的link

答案 1 :(得分:0)

有两种可能的原因可能会导致错误:

  1. 您已将过程所有权隐式捐赠给您没有的ROLE
  2. 过程和调用类型签名之间现在不匹配。验证是否有wh.sp_schema.my_sp(STRING, STRING),并且您的通话是否像
    CALL wh.sp_schema.my_sp('2018'::STRING,'abc'::STRING);

答案 2 :(得分:0)

尝试通过遵循查询语法来解决错误。

CALL database_name.schema.MY_SP('database_name','schema');

答案 3 :(得分:0)

这是赠款问题的简单案例。作为SECURITYADMIN,如果您对正在使用的角色应用必要的授予,

GRANT USAGE ON DATABASE wh TO ROLE <role>;
GRANT USAGE ON SCHEMA wh.sp_schema TO ROLE <role>;
GRANT USAGE ON ALL PROCEDURES IN SCHEMA wh.sp_schema TO ROLE <role>;

您将克服这个模棱两可的错误,然后转到下一个实际错误

JavaScript execution error: Uncaught ReferenceError: arg2 is not defined in MY_SP

这是由于javascript SP参数区分大小写,因此您需要按如下方式修改代码(将arg更改为ARG):

{sqlText: `CREATE OR REPLACE TABLE wh.table_schema.RAW_`+ARG2+`_`+ARG1+` LIKE wh.temp_schema.RAW_`+ARG2+`_TEMPLATE`}