USE `vn`; DROP procedure IF EXISTS `zone_doCalcInitialize`; DELIMITER $$ USE `vn`$$ CREATE DEFINER=`root`@`%` PROCEDURE `zone_doCalcInitialize`() proc: BEGIN /** * Initialize ticket * si en 01-07-20 aun esta este proc, kkear */ DECLARE vDone BOOL; DECLARE vTicketFk INT; DECLARE vLanded DATE; DECLARE vZoneFk INT; DECLARE cCur CURSOR FOR SELECT t.id, t.landed, t.zoneFk FROM ticket t WHERE (zonePrice IS NULL OR zoneBonus IS NULL) AND landed >= '2019-01-01' AND shipped >= '2019-01-01' GROUP BY landed, zoneFk; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; OPEN cCur; myLoop: LOOP SET vDone = FALSE; FETCH cCur INTO vTicketFk, vLanded, vZoneFk; IF vDone THEN LEAVE myLoop; END IF; DROP TEMPORARY TABLE IF EXISTS tmp.zone; CREATE TEMPORARY TABLE tmp.zone (INDEX (id)) ENGINE = MEMORY SELECT vZoneFk id; CALL zone_getOptionsForLanding(vLanded, TRUE); UPDATE ticket t LEFT JOIN tmp.zoneOption zo ON TRUE SET zonePrice = zo.price, zoneBonus = zo.bonus WHERE t.zoneFk = vZoneFk AND landed = vLanded; UPDATE ticket t LEFT JOIN vn.zone z ON z.id = t.zoneFk SET zonePrice = z.price, zoneBonus = z.bonus WHERE t.zonePrice IS NULL AND z.id = vZoneFk AND landed >= '2019-01-01' AND shipped >= '2019-01-01'; END LOOP; CLOSE cCur; END$$ DELIMITER ;