Запись информации о процедуре в таблицу в snowflake

#snowflake-cloud-data-platform

Вопрос:

У меня есть таблица, в которой записывается определенная информация о процедурах, которые называются PROCEDURE_NAME,PARAMETERS_PASSED, START_TIME, END_TIME, ERROR_MESSAGE … и другие

Я создаю процедуру, которая вставляет в эту таблицу нужную мне информацию. Однако я не знаю, как передать сообщение об ошибке из хранимой процедуры, которая вызывается в мою новую процедуру

Есть ли способ сохранить это сообщение об ошибке

БЫВШИЙ)

SP1 — ЗАПУСКАЕТ

SP1 — ЗАКАНЧИВАЕТСЯ, И ВОЗНИКАЕТ ОШИБКА

LOG_STORED_ПРОЦЕДУРА(SP1_NAME,SP1_PARAMETERS,SP1_START_TIME,SP1_END_TIME,ERROR_MESSAGE)

Ответ №1:

Используйте блок try/catch JavaScript и выполните вставку в таблицу ошибок в блоке 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;
 

Комментарии:

1. Да благословит вас Бог:)!