Estou testando a seguinte PROCEDURE, mas ela não excuta o INSERT que está entre os IFs e o REPEAT. Já testei todos selects e está OK retornando os resultados certos.
alguém poderia me ajudar?
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `InsereNotasAdicionais`(IN `turmaId` INT, IN `aluno` INT, IN `bimestre` INT)
BEGIN
-- bimestre vem por parametro
-- aluno vem por parametro
-- turmaId vem por parametro
DECLARE id, materia INT;
DECLARE done INT DEFAULT 0;
DECLARE pontos float(10,2) default 0;
DECLARE idAtualidades int default 0;
DECLARE totalAcertos int default 0;
DECLARE totalAcertosAt int default 0;
DECLARE totalQuestoes int default 1;
DECLARE totalQuestoesAt int default 1;
DECLARE cur1 CURSOR FOR Select idTipoNota, idDetalheMateria from Tiponota INNER JOIN DetalheMaterias USING(idDetalheMateria) Where calculoAutomatico = 1 AND Idturma = turmaId AND idPeriodo = bimestre;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
-- id de Atualidades
Select idDetalheMateria From detalheMaterias Where Materia = "Atualidades" and IdTurma = turmaId INTO idAtualidades;
OPEN cur1;
REPEAT
FETCH cur1 INTO id, materia;
IF NOT done THEN
IF (materia <> idAtualidades) THEN
-- exclui as notas antigas
DELETE FROM Nota Where idTipoNota IN(SELECT idTipoNota From TipoNota Where idPeriodo = bimestre AND IdDetalheMateria = materia AND calculoAutomatico = 1) AND idPessoa = aluno;
-- total questoes dadas na materia
Select IF(SUM(QuantidadeQuestoes) IS NULL, 1, SUM(QuantidadeQuestoes)) FROM Prova Where idTurma = turmaId AND idDetalheMAteria = materia AND idPeriodo = bimestre INTO totalQuestoes;
-- total questoes dadas em atualidades
Select IF(SUM(QuantidadeQuestoes) IS NULL, 1, SUM(QuantidadeQuestoes)) FROM Prova Where idTurma = turmaId AND idDetalheMAteria = idAtualidades AND idPeriodo = bimestre INTO totalQuestoesAt;
-- total de questoes acertadas
Select IF(SUM(Acertos) IS NULL, 0, SUM(Acertos)) from Acertos Where idPessoa = aluno AND idProva IN(SELECT idProva FROM Prova Where idTurma = TurmaId AND idDetalheMateria = materia) INTO totalAcertos;
-- total de questoes acertadas em Atualidades
Select IF(SUM(Acertos) IS NULL, 0, SUM(Acertos)) from Acertos Where idPessoa = aluno AND idProva IN(SELECT idProva FROM Prova Where idTurma = TurmaId AND idDetalheMateria = idAtualidades) INTO totalAcertosAt;
SET pontos = ((totalAcertos/totalQuestoes)*10)+((totalAcertosAt/totalQuestoesAt));
IF (pontos > 10) then
SET pontos = 10;
End If;
INSERT INTO Nota (Nota, idPessoa, idDetalheMateria, idTipoNota) VALUES (pontos, aluno, materia, id);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
END
Question
Guilherme Teixeira
Ola galera boa noite.
Estou testando a seguinte PROCEDURE, mas ela não excuta o INSERT que está entre os IFs e o REPEAT. Já testei todos selects e está OK retornando os resultados certos.
alguém poderia me ajudar?
Link to comment
Share on other sites
1 answer to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.