首页 > 解决方案 > 如何获取存储过程的输出作为雪花中的任务输出

问题描述

我创建了一个存储过程,它返回带有成功消息的字符串以及插入的行数或错误消息,如文件未找到或手动执行时未加载数据。当我使用任务调用相同的存储过程时,它显示(task_history)成功。并且无法找到数据是否已加载。必须手动检查。

当我提到以下问题雪花时,在计划任务中调用它时没有成功执行工作过程

过程和任务具有相同的所有者(所有者具有全局执行任务权限)。

但是在手动和任务调用过程中数据都在更新。

如果存储过程返回错误,如何使返回值出现在任务中,并使任务不执行后续任务。

标签: stored-proceduressnowflake-cloud-data-platform

解决方案


有两个部分可以从存储过程中获取返回值以保存到任务历史记录。

  1. 存储过程应该“EXECUTE AS CALLER”
  2. 您需要使用返回值调用 system$set_return_value

例子

CREATE OR REPLACE PROCEDURE MySchema.MyStoredProcedure()
RETURNS VARIANT
LANGUAGE JAVASCRIPT
EXECUTE AS CALLER
AS $$

    let command1 =  = `DELETE FROM MySchema.MyTable WHERE rownum > 10;`;
    let stmt1 = snowflake.createStatement({sqlText: command1});
    let rs = stmt1.execute();
    rs.next();
    let deleted = rs.getColumnValue(1);

    //This requires the SP to be run as CALLER - This return value is logged in Task History
    stmt1 = snowflake.createStatement({sqlText:`call system$set_return_value(' { "RowsDeleted": ${deleted} }');`});
    rs = stmt1.execute();

    return { "RowsDeleted": deleted };

$$;


推荐阅读