snowflake-cloud-data-platform - 将过程信息记录到雪花表中
问题描述
我有一个表记录有关称为 PROCEDURE_NAME、PARAMETERS_PASSED、START_TIME、END_TIME、ERROR_MESSAGE ... 和其他程序的某些信息
我正在创建一个将我想要的信息插入此表的过程。但是,我不知道如何将存储过程中的错误消息传递到我的新过程中
有没有办法保存这个错误信息
前任)
SP1 - 开始
SP1 - 结束并出现错误
LOG_STORED_PROCEDURE(SP1_NAME,SP1_PARAMETERS,SP1_START_TIME,SP1_END_TIME,ERROR_MESSAGE)
解决方案
使用 JavaScript 的 try/catch 块并插入到 catch 块中的错误表中。这是您可以修改的示例:
create or replace procedure catch_error_example()
returns string
language javascript
execute as caller
as
$$
// Try to insert into a non-existent table.
try{
cmd = {sqlText: "insert into NON_EXISTENT_TABLE select 1"};
stmt = snowflake.createStatement(cmd);
stmt.execute();
} catch (e) {
cmd = {sqlText: `insert into ERROR_LOG (STORED_PROC, ERROR_MESSAGE) values ('CATCH_ERROR_EXAMPLE', '${escapeString(e.message)}')`};
stmt = snowflake.createStatement(cmd);
stmt.execute();
}
return "Check error log.";
function escapeString(value) {
var s = value.replace(/\\/g, "\\\\");
s = s.replace(/'/g, "''" );
s = s.replace(/"/g, '\\"');
s = s.replace(/\s+/g, " ");
return s;
}
$$;
create temp table ERROR_LOG(ERROR_TIME timestamp default current_timestamp, STORED_PROC string, ERROR_MESSAGE string);
call catch_error_example();
select * from ERROR_LOG;
推荐阅读
- python - 文件/函数引用在 Flask 应用程序中不起作用(错误 500)
- javascript - 为什么我的 Angular 项目 UI 在 Windows os 和 Mac os 中显示不同?
- android-instant-apps - 即时应用程序是否支持蓝牙
- android - .getImage() 上的空对象引用 android
- javascript - 如何使用 jQuery 获取内部样式表?
- html - 使引导列停止在移动设备上中断
- php - 带有外键的 PHP MySQL 查询搜索
- powershell - 发布环境变量值未在 TFS Powershell 脚本中获取
- web-scraping - Scrapy 0 页面已抓取但没有明显问题?
- javascript - 将 JavaScript 变量传递给 jQuery DataTable 中的剃刀函数