Контрольные точки для хранимых процедур с обработкой исключений - PullRequest
0 голосов
/ 27 июня 2018

Дано : 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 , чтобы задокументировать ход выполнения сохраненных процедур .

То, что я прочитал до сих пор :

  1. GET DIAGNOSTICS документация
  2. Что-то вроде 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 должна быть запись

  1. Родитель не удалось - сообщение об ошибке
  2. Ошибка дочернего элемента - сообщение об ошибке, номер контрольной точки, сообщение об ошибке исключения SQL.

Заранее спасибо.

...