DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `srt`.`expedition_moving`(vBufferFk INT) BEGIN /** * Una expedición ha entrado en el celuveyor desde un buffer * * @param vBufferFk Identificador de srt.buffer * */ DECLARE vExpeditionFk INT; DECLARE vPosition INT; SELECT min(`position`) INTO vPosition FROM srt.expedition e WHERE e.bufferFk = vBufferFk; SELECT e.id INTO vExpeditionFk FROM srt.expedition e WHERE e.`position` = vPosition AND e.bufferFk = vBufferFk LIMIT 1; INSERT INTO srt.expeditionLog (expeditionFk, bufferFk, `action`) VALUES(vExpeditionFk, vBufferFk, 'MOV'); UPDATE srt.expedition e JOIN srt.expeditionState es on es.description = 'MOVING' JOIN srt.moving m ON m.expeditionFk = e.id SET e.stateFk = es.id, e.bufferFk = m.bufferToFk, e.`position` = 0 WHERE e.id = vExpeditionFk; SET @posicion := 0; UPDATE srt.expedition e SET e.`position` = @posicion := @posicion + 1 WHERE e.bufferFk = vBufferFk AND e.id != vExpeditionFk ORDER BY e.`position`; CALL srt.buffer_setStateType(vBufferFk, 'FREE', NULL); END$$ DELIMITER ;