【问题标题】:Unable to run a stored procedure in snowflake database无法在雪花数据库中运行存储过程
【发布时间】:2018-11-27 14:12:53
【问题描述】:
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.

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

【问题讨论】:

    标签: stored-procedures snowflake-cloud-data-platform


    【解决方案1】:

    这是一个简单的拨款问题案例。作为 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`}
    

    【讨论】:

      【解决方案2】:

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

      这是他们 API 的 link(注意 Draft Document 写在右侧)。

      这是link 在他们的支持论坛上的一张票,他们已经确认了。

      【讨论】:

      • 显然,这在 2019 年 5 月现在是错误的。提问者必须提前访问(并且应该注意到这一点)......
      【解决方案3】:

      这可能会出错有两种明显的可能性:

      1. 您已将过程所有权隐含地捐赠给您没有的ROLE
      2. 现在过程和调用类型签名之间不匹配。确认有 wh.sp_schema.my_sp(STRING, STRING) 并且您的呼叫类似于
        CALL wh.sp_schema.my_sp('2018'::STRING,'abc'::STRING);

      【讨论】:

        【解决方案4】:

        尝试按照查询语法解决错误。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-01
          • 2021-08-25
          • 2022-11-11
          • 2020-12-10
          • 1970-01-01
          • 2021-06-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多