stored-procedures - 如何获取存储过程的输出作为雪花中的任务输出
问题描述
我创建了一个存储过程,它返回带有成功消息的字符串以及插入的行数或错误消息,如文件未找到或手动执行时未加载数据。当我使用任务调用相同的存储过程时,它显示(task_history)成功。并且无法找到数据是否已加载。必须手动检查。
当我提到以下问题雪花时,在计划任务中调用它时没有成功执行工作过程
过程和任务具有相同的所有者(所有者具有全局执行任务权限)。
但是在手动和任务调用过程中数据都在更新。
如果存储过程返回错误,如何使返回值出现在任务中,并使任务不执行后续任务。
解决方案
有两个部分可以从存储过程中获取返回值以保存到任务历史记录。
- 存储过程应该“EXECUTE AS CALLER”
- 您需要使用返回值调用 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 };
$$;
推荐阅读
- android - Android 原生 - jni 编写的原生代码如何在 root 权限下运行?
- angular - ng 添加 @angular/pwa 时出错
- c# - 使用二维数据和 MVVM 绑定到 DataGrid
- python - 与 tensorflow-gpu 1.4 一起使用的 keras 版本
- c# - 如何在 ASP.NET Core 集成测试中覆盖来自其他容器的 DI 注册
- ios - Swift - CollectionViewCell 边框错误或不完整
- azure-devops - VSTS Windows 机器文件复制 robocopy 未找到
- sql - 如何获取列值的总和作为 SQL 结果集中的新列
- javascript - 如何更改猫头鹰轮播中的视频背景图像?
- javascript - 不稳定的鼠标进入/鼠标离开子菜单