DELIMITER $$ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `hedera`.`orderRow_updateOverstocking`(vOrderFk INT) BEGIN /** * Set amount = 0 to avoid overbooking sales * * @param vOrderFk hedera.order.id */ DECLARE vCalcFk INT; DECLARE vDone BOOL; DECLARE vWarehouseFk INT; DECLARE cWarehouses CURSOR FOR SELECT DISTINCT warehouseFk FROM orderRow WHERE orderFk = vOrderFk AND shipment = util.VN_CURDATE(); DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; RESIGNAL; END; OPEN cWarehouses; checking: LOOP SET vDone = FALSE; FETCH cWarehouses INTO vWarehouseFk; IF vDone THEN LEAVE checking; END IF; CALL cache.available_refresh(vCalcFk, FALSE, vWarehouseFk, util.VN_CURDATE()); UPDATE orderRow r JOIN `order` o ON o.id = r.orderFk JOIN orderConfig oc JOIN cache.available a ON a.calc_id = vCalcFk AND a.item_id = r.itemFk SET r.amount = 0 WHERE ADDTIME(o.rowUpdated, oc.reserveTime) < util.VN_NOW() AND a.available <= 0 AND r.warehouseFk = vWarehouseFk AND r.orderFk = vOrderFk; END LOOP; CLOSE cWarehouses; END$$ DELIMITER ;