Дано :
1. У меня есть proc ( Parent ), который вызывает другой proc ( Child ), который содержит несколько операций, таких как обновление нескольких столбцов, таких как total_visits, total_revenue, total_items_sold и т. Д.
2. У меня есть таблица с именем Event_Log со столбцами [proc_name, start_time, end_time, exit_status, error_message] , предназначенная для хранения состояния каждой процедуры Child и Родитель .
Цель : внедрить методологию на основе Checkpoint для отслеживания выполнения хранимой процедуры, в которой она обновляет переменную контрольной точки при успешном завершении любой процедуры / операции. Он также должен обновить таблицу Event_Log , чтобы задокументировать ход выполнения сохраненных процедур .
То, что я прочитал до сих пор :
GET DIAGNOSTICS
документация
- Что-то вроде
DECLARE CONTINUE/EXIT HANDLER FOR SQLEXCEPTION
.
Найдите пример кода для работы:
drop procedure if exists Parent;
delimiter $$
CREATE PROCEDURE Parent(value INT)
BEGIN
/* some event logic*/
CALL Child(12);
/* some event logic*/
INSERT INTO Event_Log(info...)
END$$
DELIMITER;
drop procedure if exists Child;
delimiter $$
CREATE PROCEDURE Child(value INT)
BEGIN
/* ---- some event logic ------
checkpoint 1 :
operation 1
checkpoint 2 :
operation 2
checkpoint 3 :
operation 3
*/
/* after execution of all the procs */
INSERT INTO Event_Log(info...)
END$$
DELIMITER;
CALL Parent(123);
Итак, если checkpoint 2
в Child
не удалось, то в Event_Log должна быть запись
- Родитель не удалось - сообщение об ошибке
- Ошибка дочернего элемента - сообщение об ошибке, номер контрольной точки, сообщение об ошибке исключения SQL.
Заранее спасибо.