DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `srt`.`expedition_check`(vExpeditionFk INT) RETURNS int(11) NOT DETERMINISTIC READS SQL DATA BEGIN /** * Comprueba si existe una expedición, generando una aleatoria en caso contrario. * * @param vExpeditionFk Identificador de srt.expedition * */ DECLARE vExpeditionOutFk INT; DECLARE vIsOnTheCelluveyor BOOL; SELECT id INTO vExpeditionOutFk FROM srt.expedition WHERE id = vExpeditionFk; SELECT COUNT(*) INTO vIsOnTheCelluveyor FROM srt.moving m JOIN srt.movingState ms ON ms.id = m.stateFk WHERE m.expeditionFk = vExpeditionFk AND ms.description != 'NEW'; IF ISNULL(vExpeditionOutFk) OR vIsOnTheCelluveyor THEN SELECT LEAST(-1,MIN(id)- 1) INTO vExpeditionOutFk FROM srt.expedition; CASE vExpeditionFk WHEN 0 THEN -- Genera una EXP que termine en 0 SET vExpeditionOutFk = CEIL((vExpeditionOutFk - 10) / 10) * 10; WHEN 2 THEN -- Genera una EXP que termine en 2 SET vExpeditionOutFk = -2 + CEIL((vExpeditionOutFk - 10) / 10) * 10; ELSE -- Genera una EXP que termine en 9 SET vExpeditionOutFk = -9 + CEIL((vExpeditionOutFk - 10) / 10) * 10; END CASE; INSERT INTO srt.expedition(id,stateFk,width,`length`, height) SELECT vExpeditionOutFk, es.id , p.width * 10, p.`depth` *10, p.height * 10 FROM srt.expeditionState es JOIN vn.packaging p ON p.id = '94' WHERE es.description = 'ENTERING'; END IF; RETURN vExpeditionOutFk; END$$ DELIMITER ;