#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. Да благословит вас Бог:)!