boa tarde pessoal, tenho uma procedure funcional, porém tive a necessidade de chama-la em um loop para uma atualização de valores e a mesma acusou o erro "Commands out of sync; you can’t run this command now"
como se algum recurso não tivesse sido fechado, ja quebrei a cabeça e como sou novato em criação de procedures não consegui identificar o erro, caso alguem mais experiente possa me dar uma ajuda… segue o corpo da mesma.
BEGIN
DECLARE cod, z INT;
DECLARE tip, tipoDescrica, descr VARCHAR(255);
DECLARE dataOcorrenci DATE;
DECLARE valo,grau DECIMAL(10,2);
DECLARE aluno_cursor CURSOR FOR (
SELECT
esc_punicoes.punc_codigo as codigo,
"PUNIÇÃO" as tipo,
esc_tipo_punicao.tppnc_descricao as tipoDescricao,
esc_punicoes.punc_data as dataocorrencia,
esc_punicoes.punc_valor as valor,
esc_punicoes.punc_descricao as descri
FROM
cad_aluno
INNER JOIN esc_punicoes ON cad_aluno.aln_codigo = esc_punicoes.aln_codigo
INNER JOIN esc_tipo_punicao ON esc_tipo_punicao.tppnc_codigo = esc_punicoes.tppnc_codigo
where cad_aluno.aln_codigo = codigoAluno
)
UNION
(
SELECT
esc_elogios.elog_codigo as codigo,
"ELOGIO" as tipo,
esc_tipo_elogios.tiplg_descricao as tipoDescricao,
esc_elogios.elog_data as dataocorrencia,
esc_elogios.elog_valor as valor,
esc_elogios.elog_descricao as descri
FROM
cad_aluno
INNER JOIN esc_elogios ON cad_aluno.aln_codigo = esc_elogios.aln_codigo
INNER JOIN esc_tipo_elogios ON esc_tipo_elogios.tiplg_codigo = esc_elogios.tiplg_codigo
where cad_aluno.aln_codigo = codigoAluno
)
order by dataocorrencia ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET z = 1;
drop TEMPORARY table IF EXISTS fichaTemp;
CREATE TEMPORARY table fichaTemp (codtemp INT,tiptemp VARCHAR(50),tipDescatemp VARCHAR(255), dataOcortemp Date, valotemp decimal(10,2), descrtemp Text, grau DECIMAL(10,2) );
set grau = 0;
OPEN aluno_cursor;
start TRANSACTION;
REPEAT
FETCH aluno_cursor INTO cod, tip, tipoDescrica, dataOcorrenci, valo, descr;
/* verifica se z = null ou seja, se acabaram os registros */
if(ISNULL(z))
then
if(tip = 'PUNIÇÃO')
then
set grau = grau - valo;
else
set grau = grau + valo;
end if;
if(grau < 0) then set grau = 0; end if;
if (grau > 10) then set grau = 10; end if;
insert into fichaTemp values (cod, tip, tipoDescrica, dataOcorrenci, valo, descr,grau);
end if;
UNTIL (z=1)
END REPEAT;
COMMIT;
select * from fichaTemp order by dataOcorrenci desc;
CLOSE aluno_cursor;
drop TEMPORARY table IF EXISTS fichaTemp;
END