所以我有这个大学项目,我必须在MySql中创建一个关于管理足球比赛的数据库,我已经有了这个程序来填补整个赛季,但是当我打电话给它时,它会崩溃一半。我真的不知道那是怎么回事。我甚至把它寄给了我的一个朋友,他有一台更好的PC,而且撞击率变得更糟。如果您想仔细查看,请在下方粘贴代码段。链接是如果你想测试整个事情。在此先感谢,对不起参数是葡萄牙语。提前致谢。 链接: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 ;