USE `vn`; DROP procedure IF EXISTS `available_calc`; DELIMITER $$ USE `vn`$$ CREATE DEFINER=`root`@`%` PROCEDURE `available_calc`( vDate DATE, vAddress INT, vAgencyMode INT) BEGIN /** * Calculates the available for all available stores * according to the given parameters. * * @param vDate The delivery date * @param vAddress The delivery address id * @param vAgencyMode The shipping agency * @return tmp.availableCalc(calcFk) The available cache ids */ DECLARE vCalcFk INT; DECLARE vShipment DATE; DECLARE vWarehouse INT; DECLARE vDone BOOL; DECLARE cWarehouses CURSOR FOR SELECT warehouseFk, shipped FROM tmp.zoneGetShipped; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; -- Establecemos los almacenes y las fechas que van a entrar al disponible CALL vn.zone_getShippedWarehouse(vDate, vAddress, vAgencyMode); DROP TEMPORARY TABLE IF EXISTS tmp.availableCalc; CREATE TEMPORARY TABLE tmp.availableCalc( calcFk INT UNSIGNED, PRIMARY KEY (calcFk) ) ENGINE = MEMORY; OPEN cWarehouses; l: LOOP SET vDone = FALSE; FETCH cWarehouses INTO vWarehouse, vShipment; IF vDone THEN LEAVE l; END IF; CALL `cache`.available_refresh(vCalcFk, FALSE, vWarehouse, vShipment); INSERT IGNORE INTO tmp.availableCalc SET calcFk = vCalcFk; END LOOP; CLOSE cWarehouses; DROP TEMPORARY TABLE tmp.zoneGetShipped; END$$ DELIMITER ;