So I have this university project where I have to create a database in MySql about managing Football competitions where I've got this procedure to fill in a full season, but it crashes half the time when I call it. I really don't know how that can be. I even sent it to a friend of mine who has a better PC and the crashing ratio gets even worse. The code segment is pasted down below if you want to take a closer look. The link is if you want to test the whole thing. Thanks in advance and I'm sorry the parameters are in portuguese. Thanks in advance. Link: https://codeshare.io/5zbb4W
DROP PROCEDURE IF EXISTS create_jornada_primeira_volta;
DELIMITER @
CREATE PROCEDURE create_jornada_primeira_volta()
BEGIN
DECLARE xepoca, xcompeticao, xepoca2, xjornada, cnt, njogos INT;
SELECT cod_epoca, cod_competicao INTO xepoca, xcompeticao FROM Epoca GROUP BY cod_epoca DESC LIMIT 1;
SELECT num_jornada, cod_epoca INTO xjornada, xepoca2 FROM Jornada GROUP BY cod_epoca DESC LIMIT 1;
IF (xepoca != xepoca2 OR xjornada IS NULL) THEN
SET xjornada = 1;
ELSE
SET xjornada = xjornada + 1;
END IF;
SELECT num_equipas(xcompeticao)/2 INTO njogos;
SET cnt = 0;
INSERT INTO Jornada VALUES (xjornada, xepoca, xcompeticao);
WHILE (cnt != njogos) DO
CALL create_jogo_primeira_volta;
SET cnt = cnt + 1;
END WHILE;
END;
@
DELIMITER ;
DROP PROCEDURE IF EXISTS create_jornada_segunda_volta;
DELIMITER @
CREATE PROCEDURE create_jornada_segunda_volta()
BEGIN
DECLARE xepoca, xcompeticao, xjornada, cnt, njogos, xequipa_visitada, xequipa_visitante, xinfraestrutura, xequipa_arbitragem INT;
SELECT cod_epoca, cod_competicao INTO xepoca, xcompeticao FROM Epoca GROUP BY cod_epoca DESC LIMIT 1;
SELECT num_jornada INTO xjornada FROM Jornada GROUP BY num_jornada DESC LIMIT 1;
SET xjornada = xjornada + 1;
SELECT num_equipas(xcompeticao)/2 INTO njogos;
SET cnt = 0;
INSERT INTO Jornada VALUES (xjornada, xepoca, xcompeticao);
WHILE (cnt != njogos) DO
SELECT cod_visitado, cod_visitante
INTO xequipa_visitante, xequipa_visitada
FROM Jogo
Where num_jornada = xjornada - (num_equipas(xcompeticao) * 2 - 2) / 2 AND cod_epoca = xepoca
ORDER BY cod_equipa_arbitragem
LIMIT cnt,1;
CALL create_equipa_arbitragem;
SELECT cod_equipa_arbitragem INTO xequipa_arbitragem FROM Equipa_arbitragem GROUP BY cod_equipa_arbitragem DESC LIMIT 1;
SELECT cod_infraestrutura INTO xinfraestrutura FROM Infraestrutura WHERE tipo = 'Estadio' AND cod_clube = (SELECT cod_clube FROM Equipa WHERE cod_equipa = xequipa_visitada);
INSERT INTO Jogo VALUES (xepoca, xcompeticao, xjornada, xequipa_visitada, xequipa_visitante, xequipa_arbitragem, xinfraestrutura, null, null);
SET cnt = cnt + 1;
END WHILE;
END;
@
DELIMITER ;
DROP PROCEDURE IF EXISTS create_epoca;
DELIMITER @
CREATE PROCEDURE create_epoca()
BEGIN
DECLARE ncompeticoes, cnt_comp, cnt_jornadas, nepoca, njornadas INT;
SELECT COUNT(*) INTO ncompeticoes FROM Competicao;
SET cnt_comp = 1;
SELECT cod_epoca INTO nepoca FROM Epoca GROUP BY cod_epoca DESC LIMIT 1;
IF nepoca IS NULL THEN
SET nepoca = 1;
ELSE
SET nepoca = nepoca + 1;
END IF;
WHILE (cnt_comp != (ncompeticoes + 1)) DO
INSERT INTO Epoca VALUES (nepoca, cnt_comp, 2017, CURDATE(), null, null);
SELECT ((num_equipas(cnt_comp) * 2 - 2) / 2) INTO njornadas;
SET cnt_jornadas = 0;
WHILE (cnt_jornadas < njornadas) DO
CALL create_jornada_primeira_volta;
SET cnt_jornadas = cnt_jornadas + 1;
END WHILE;
SET cnt_jornadas = 0;
WHILE (cnt_jornadas != njornadas) DO
CALL create_jornada_segunda_volta;
SET cnt_jornadas = cnt_jornadas + 1;
END WHILE;
SET cnt_comp = cnt_comp + 1;
END WHILE;
END;
@
DELIMITER ;
Aucun commentaire:
Enregistrer un commentaire