首页 > 解决方案 > 将过程信息记录到雪花表中

问题描述

我有一个表记录有关称为 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)

标签: snowflake-cloud-data-platform

解决方案


使用 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;

推荐阅读