salix/db/routines/util/procedures/vn_scheduler.sql

76 lines
2.5 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `util`.`VN_SCHEDULER`()
BEGIN
DECLARE vDone BOOL;
DECLARE vError VARCHAR(255) DEFAULT NULL;
DECLARE vErrorCode VARCHAR(255) DEFAULT NULL;
DECLARE vSchema VARCHAR(255);
DECLARE vStatus VARCHAR(255);
DECLARE vProcedure VARCHAR(255);
-- DECLARE vLogMail VARCHAR(255);
DECLARE vScheduleFk INT;
-- Obtener datos de la tabla vn_schedules
DECLARE vQueue CURSOR FOR
SELECT id, `schema`, `procedure`, `status`
FROM vn_schedules
WHERE status = 'scheduled';
OPEN vQueue;
l: LOOP
SET vDone = FALSE;
FETCH vQueue INTO vScheduleFk, vSchema, vProcedure, vStatus;
IF vDone THEN
LEAVE l;
END IF;
UPDATE vn_schedules
SET `started` = util.VN_NOW(),
`finished` = NULL,
`error` = NULL,
`errorCode` = NULL
WHERE id = vScheduleFk;
SET vError = NULL;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
GET DIAGNOSTICS CONDITION 1
vError = MESSAGE_TEXT,
vErrorCode = RETURNED_SQLSTATE;
CALL util.exec(CONCAT('CALL `', vSchema ,'`.`', vProcedure ,'`'));
IF vError IS NOT NULL THEN
-- IF vLogMail IS NOT NULL THEN
-- CALL vn.mail_insert(
-- vLogMail,
-- NULL,
-- CONCAT('Nightly task failed (', vSchema, '.', vProcedure, ')'),
-- CONCAT(
-- '[', vErrorCode, '] ', vError, CHAR(13, 10), -- Line break
-- 'See ', SCHEMA(), '.nightTask table for more info.'
-- )
-- );
-- END IF;
UPDATE vn_schedules
SET `error` = vError,
finished = util.VN_NOW(),
lastFinished = util.VN_NOW()
`errorCode` = vErrorCode
`status` = 'error'
WHERE id = vScheduleFk;
ELSE
UPDATE vn_schedules
SET `error` = vError,
`errorCode` = vErrorCode
finished = util.VN_NOW(),
lastFinished = util.VN_NOW(),
`status` = 'exec'
WHERE id = vScheduleFk;
END IF;
END LOOP;
CLOSE vQueue;
END$$
DELIMITER ;