雪花存储过程多语句列表参数

Posted

技术标签:

【中文标题】雪花存储过程多语句列表参数【英文标题】:Snowflake Stored Procedure multiple statements list parameters 【发布时间】:2021-03-13 01:26:23 【问题描述】:

我想创建一个包含多个 SQL 语句的 Snowflake 存储过程,并输入多个参数,这些参数恰好是一个列表。遇到麻烦。有可能吗?

我的尝试:

CREATE OR REPLACE PROCEDURE SP_MULTI_STATEMENT(NAME string , AGE string)
returns string not null
language javascript
as
$$
var cmd = `
update TABLE_1 set SOMETHING1 = 'OK' where NAME in ($NAME);
update TABLE_2 set SOMETHING2 = 'GREAT' where AGE in ($AGE);
    `
    var sql = snowflake.createStatement(sqlText: cmd);
    var result = sql.execute();
    return 'DONE';
    $$;

当我打电话给我的 SP 时,我希望它是:

call SP_MULTI_STATEMENT('Andy, Brian, Christa','21,23,24');

【问题讨论】:

你遇到了什么样的“有问题”?有任何错误信息吗? 【参考方案1】:

大部分看起来不错,但您需要在名称列表中添加更多引用的转义符。

这个例子有效:

CREATE OR REPLACE PROCEDURE SP_MULTI_STATEMENT(NAMES string , AGES string)
returns string not null
language javascript
as
$$
var cmd = `
select *
from (select 'a' name, 33 age)
where NAME in ($NAMES)
and AGE in ($AGES);
    `
    var sql = snowflake.createStatement(sqlText: cmd);
    var result = sql.execute();
    if(result.next()) 
        return result.NAME;
    
    return 'no results'
    $$;
    
call SP_MULTI_STATEMENT('\'a\', \'b\', \'c\'', '30, 31, 32, 33');

【讨论】:

以上是关于雪花存储过程多语句列表参数的主要内容,如果未能解决你的问题,请参考以下文章

如何评估雪花存储过程中的语句

mysql 存储过程

雪花存储过程调用具有迭代返回消息的多个语句

如何获取雪花中执行存储过程的名称?

可以从雪花中的函数调用存储过程吗

雪花循环通过数组运行存储过程