USE `vn`; DROP procedure IF EXISTS `zoneClosure_recalc`; DELIMITER $$ USE `vn`$$ CREATE DEFINER=`root`@`%` PROCEDURE `zoneClosure_recalc`() proc: BEGIN /** * Recalculates the delivery time (hour) for every zone in days + scope in future */ DECLARE vScope INT; DECLARE vCounter INT DEFAULT 0; DECLARE vShipped DATE DEFAULT CURDATE(); DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN DO RELEASE_LOCK('vn.zoneClosure_recalc'); RESIGNAL; END; IF NOT GET_LOCK('vn.zoneClosure_recalc', 0) THEN LEAVE proc; END IF; SELECT scope INTO vScope FROM zoneConfig; DROP TEMPORARY TABLE IF EXISTS tmp.zone; CREATE TEMPORARY TABLE tmp.zone (INDEX (id)) ENGINE = MEMORY SELECT id FROM zone; TRUNCATE TABLE zoneClosure; WHILE vCounter <= vScope DO CALL zone_getOptionsForShipment(vShipped, TRUE); INSERT INTO zoneClosure(zoneFk, dated, `hour`) SELECT zoneFk, vShipped, `hour` FROM tmp.zoneOption; SET vCounter = vCounter + 1; SET vShipped = TIMESTAMPADD(DAY, 1, vShipped); END WHILE; DROP TEMPORARY TABLE tmp.zone; DO RELEASE_LOCK('vn.zoneClosure_recalc'); END$$ DELIMITER ;