簡體   English   中英

在 Snowflake 中創建存儲過程時,有沒有辦法返回與查詢相同的 output,並在其中執行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM