![](/img/trans.png)
[英]How to reference the return value of a stored procedure called within a task in snowflake
[英]When creating stored procedure in Snowflake is there a way to return same output as a query, executed within it?
我創建了一個存儲過程來設置特定的變量值並使用該變量執行合並。 目前,它只返回一條硬編碼消息“成功執行”。 是否有可能返回與原始合並查詢返回相同的結果,比如
插入的行數
更新的行數
?
CREATE OR REPLACE PROCEDURE ALERTS_MERGE_PROCEDURE ()
RETURNS STRING NOT NULL
LANGUAGE JAVASCRIPT
AS
$$
var sql_command = '
MERGE INTO tablename
..
WHEN MATCHED THEN
UPDATE SET ...
WHEN NOT MATCHED THEN
INSERT ...
);
'
snowflake.execute(
{
sqlText: sql_command
});
return "Successfully executed.";
$$;
您可以遍歷執行返回的 object 第一行的列:
create or replace temp table tablename as
select 1::int id, 'a'::string tx;
create or replace temp table tablesource as
select 1::int id, 'b'::string tx
union select 2, 'c';
CREATE OR REPLACE PROCEDURE ALERTS_MERGE_PROCEDURE ()
RETURNS STRING NOT NULL
LANGUAGE JAVASCRIPT
AS
$$
var sql_command = `
merge into tablename a
using tablesource b
on a.id = b.id
when matched then update set tx=b.tx
when not matched then insert (id, tx) values (b.id, b.tx);
`;
var x = snowflake.execute({sqlText: sql_command});
x.next();
var result = '';
for (i=1; i<=x.getColumnCount(); i++) {
result += x.getColumnName(i) + ': ' + x.getColumnValue(i) + '\n';
}
return result;
$$;
call alerts_merge_procedure();
退貨:
number of rows inserted: 1
number of rows updated: 1
是的,看語句object的方法。這都記錄在這里: https://docs.snowflake.com/en/sql-reference/stored-procedures-api.html#object-statement
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.