Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ricardo Gama

Cursor registro duplicado

Recommended Posts

Galera, fiz a seguinte stored:

 

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `insere_pagamento_aluno`()
BEGIN

-- declaro as variáveis necessário para fazer as inserções de pagamento
DECLARE v_total INT DEFAULT 0;
DECLARE done INT DEFAULT FALSE;
DECLARE v_id_aluno INT;
DECLARE v_preco_turma DECIMAL(10,2);
DECLARE v_id_turma INT;
DECLARE cur CURSOR FOR (SELECT alunos.id AS id_aluno, turmas.preco, turmas.id AS id_turma
FROM alunos_turmas
JOIN alunos ON alunos.id = alunos_turmas.aluno_id
JOIN turmas ON turmas.id = alunos_turmas.turma_id
WHERE alunos.situacao = 'A'
AND alunos.is_bolsista != 1
AND turmas.professore_id IS NOT NULL
ORDER BY alunos.id);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
-- fim da declaração



SELECT COUNT(*) INTO v_total FROM `options`;
IF v_total <= 0 THEN
SELECT "Você precisa definir as configurações do sistema." AS MSG;
ELSE
SELECT COUNT(*) INTO v_total FROM pagamentos WHERE MONTH(created) = MONTH(CURRENT_DATE);
IF v_total <= 0 THEN
OPEN cur;
read_loop: LOOP
IF done THEN
LEAVE read_loop;
END IF;
FETCH cur INTO v_id_aluno, v_preco_turma, v_id_turma;
INSERT INTO pagamentos (aluno_id, valor, turma_id, created)VALUES(v_id_aluno, v_preco_turma, v_id_turma, CURRENT_TIMESTAMP);
UPDATE alunos SET situacao = 'EA' WHERE id = v_id_aluno;
END LOOP;
SELECT "ok" AS MSG;
END IF;
END IF;
END

 

Bom, ela percorre todos os alunos que tem uma turma, e insere o pagamento dele. Ela roda tranquilo, porém sempre duplica o último registro. Alguém consegue me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

qdo vc executa essa query

 

SELECT alunos.id AS id_aluno, turmas.preco, turmas.id AS id_turma
                            FROM alunos_turmas
                            JOIN alunos ON alunos.id = alunos_turmas.aluno_id
                            JOIN turmas ON turmas.id = alunos_turmas.turma_id
                            WHERE alunos.situacao = 'A'
                            AND alunos.is_bolsista != 1
                            AND turmas.professore_id IS NOT NULL
                            ORDER BY alunos.id

ele retorna os 2 ultimos duplicados?

parece q tem um aluno em 2 turmas

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.