DROP procedure IF EXISTS `vn`.`clonTravelComplete`; DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`clonTravelComplete`(IN `vTravelFk` INT, IN `vDateStart` DATE, IN `vDateEnd` DATE, IN `vRef` VARCHAR(255)) BEGIN DECLARE vTravelNew INT; DECLARE vEntryNew INT; DECLARE vDone BIT DEFAULT 0; DECLARE vAuxEntryFk INT; DECLARE vRsEntry CURSOR FOR SELECT e.id FROM entry e JOIN travel t ON t.id = e.travelFk WHERE e.travelFk = vTravelFk; DECLARE vRsBuy CURSOR FOR SELECT b.* FROM buy b JOIN entry e ON b.entryFk = e.id WHERE e.travelFk = vTravelNew and b.entryFk=entryNew ORDER BY e.id; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = 1; DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; RESIGNAL; END; START TRANSACTION; INSERT INTO travel (shipped,landed, warehouseInFk, warehouseOutFk, agencyFk, ref, isDelivered, isReceived, m3, kg) SELECT vDateStart, vDateEnd,warehouseInFk, warehouseOutFk, agencyFk, vRef, isDelivered, isReceived, m3, kg FROM travel WHERE id = vTravelFk; SET vTravelNew = LAST_INSERT_ID(); SET vDone = 0; OPEN vRsEntry ; FETCH vRsEntry INTO vAuxEntryFk; WHILE NOT vDone DO INSERT INTO entry (supplierFk, ref, isInventory, isConfirmed, isOrdered, isRaid, commission, created, evaNotes, travelFk, currencyFk, companyFk, gestDocFk, invoiceInFk) SELECT supplierFk, ref, isInventory, isConfirmed, isOrdered, isRaid, commission, created, evaNotes, vTravelNew, currencyFk, companyFk, gestDocFk, invoiceInFk FROM entry WHERE id = vAuxEntryFk; SET vEntryNew = LAST_INSERT_ID(); INSERT INTO buy (entryFk, itemFk, quantity, buyingValue, packageFk, stickers, freightValue, packageValue, comissionValue, packing, `grouping`, groupingMode, location, price1, price2, price3, minPrice, producer, printedStickers, isChecked) SELECT vEntryNew, itemFk, quantity, buyingValue, packageFk, stickers, freightValue, packageValue, comissionValue, packing, `grouping`, groupingMode, location, price1, price2, price3, minPrice, producer, printedStickers, isChecked FROM buy WHERE entryFk = vAuxEntryFk; FETCH vRsEntry INTO vAuxEntryFk; END WHILE; CLOSE vRsEntry; COMMIT; END$$ DELIMITER ;