我正在 Snowflake 中创建一个最终将由任务调用的存储过程。
但是我收到以下错误:Multiple SQL statements in a single API call are not supported; use one API call per statement instead.
并且不确定在我的 Javascript 实现中如何处理建议的解决方案:
这是我所拥有的
CREATE or replace PROCEDURE myStoreProcName()
RETURNS VARCHAR
LANGUAGE javascript
AS
$$
var rs = snowflake.execute( { sqlText:
`set curr_date = '2015-01-01';
CREATE OR REPLACE TABLE myTableName AS
with cte1 as (
SELECT
*
FROM Table1
where date = $curr_date
)
,cte2 as (
SELECT
*
FROM Table2
where date = $curr_date
)
select * from
cte1 as 1
inner join cte2 as 2
on(1.key = 2.key)
`
} );
return 'Done.';
$$;
答案 0 :(得分:1)
您可以编写自己的辅助函数(用户的想法:waldente):
this.executeMany=(s) => s.split(';').map(sqlText => snowflake.createStatement({sqlText}).execute());
executeMany('set curr_date = '2015-01-01';
CREATE OR REPLACE TABLE ...');
最后一条语句不应包含 ;
,如果在其中一个 DDL 中存在 ;
而不是作为分隔符,它也可能会失败。
答案 1 :(得分:0)
你不能:
var rs = snowflake.execute( { sqlText:
`set curr_date = '2015-01-01';
CREATE OR REPLACE TABLE myTableName AS
...
`
相反,您需要调用 execute
两次(或更多次)。每个用于以 ;
结尾的不同查询。