DELIMITER $$ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_cloneAll`(vTicketFk INT, vNewShipped DATE, vWithWarehouse BOOLEAN, OUT vNewTicketFk INT) BEGIN DECLARE vDone BOOLEAN DEFAULT FALSE; DECLARE vOldSaleFk INT; DECLARE vNewSaleFk INT; DECLARE cur1 CURSOR FOR SELECT id FROM sale WHERE ticketFk = vTicketFk; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; SET vNewShipped = IFNULL(vNewShipped, util.VN_CURDATE()); CALL ticket_Clone(vTicketFk, vNewTicketFk); UPDATE ticket SET landed = TIMESTAMPADD(DAY, DATEDIFF(vNewShipped, shipped), landed), shipped = vNewShipped, warehouseFk = IF(vWithWarehouse, warehouseFk, NULL) WHERE id = vNewTicketFk; OPEN cur1; read_loop: LOOP FETCH cur1 INTO vOldSaleFk; IF vDone THEN LEAVE read_loop; END IF; INSERT INTO sale(ticketFk, itemFk, quantity, concept, price, discount, priceFixed, isPriceFixed) SELECT vNewTicketFk, itemFk, quantity, concept, price, discount, priceFixed, isPriceFixed FROM sale WHERE id = vOldSaleFk; SELECT max(id) INTO vNewSaleFk FROM sale WHERE ticketFk = vNewTicketFk; INSERT INTO saleComponent(saleFk, componentFk, value, isGreuge) SELECT vNewSaleFk, componentFk, value, isGreuge FROM saleComponent WHERE saleFk = vOldSaleFk; END LOOP; CLOSE cur1; END$$ DELIMITER ;