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

时间:2021-03-13 01:26:23

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

我想用多个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 个答案:

答案 0 :(得分:0)

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

这个例子有效:

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');