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中进行了查看,但是除了表之外,看不到其他任何东西(存储过程)。
答案 0 :(得分:0)
Snowflake不支持基于Stored Procedures. They are implementing
javascript`的API,但仍处于草稿模式。
此处是其API的link(注意<草稿文档写在右侧)。
这是他们在支持论坛上确认的票证的link。
答案 1 :(得分:0)
有两种可能的原因可能会导致错误:
ROLE
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`}