Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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;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?
Carregando comentários...