存储过程处理雪花中的多个 SQL 语句

时间:2021-04-20 18:42:55

标签: snowflake-cloud-data-platform

我正在 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.';
$$;


2 个答案:

答案 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 两次(或更多次)。每个用于以 ; 结尾的不同查询。