Ir para conteúdo

POWERED BY:

Arquivado

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

Ricardo Gama

Lock

Recommended Posts

Galera, tenho uma stored que roda pra gerar pagamentos pra aluno.

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
FETCH cur INTO v_id_aluno, v_preco_turma, v_id_turma;
IF done THEN
LEAVE read_loop;
END IF;
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;
CLOSE cur;
SELECT "ok" AS MSG;
END IF;
END IF;
END

 

Durante a stored o lock é automático ou isso tem que ser declarado? Ou então não tem nada a ver com isso que eu to fazendo e tem que ser de outra forma? Quem puder me ajudar, agradeço :D

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.