procedure com média, erro...
26/02/2013
0
Todo o resto do código está funcionando normal, mas preciso calcular a média de acordo com o exemplo abaixo e está parando no end.
begin
for
select n.disciplina_notas,
d.nome_disciplina,
count(*) as qtde_notas,
(select n1.nota
from notas n1
where n1.disciplina_notas = n.disciplina_notas
and n1.matricula_aluno_notas = n.matricula_aluno_notas
and n1.codigo_turma_notas = n.codigo_turma_notas
and n1.bimestre = '1 BIMESTRE') nota_1,
(select n2.nota
from notas n2
where n2.disciplina_notas = n.disciplina_notas
and n2.matricula_aluno_notas = n.matricula_aluno_notas
and n2.codigo_turma_notas = n.codigo_turma_notas
and n2.bimestre = '2 BIMESTRE') nota_2,
(select n3.nota
from notas n3
where n3.disciplina_notas = n.disciplina_notas
and n3.matricula_aluno_notas = n.matricula_aluno_notas
and n3.codigo_turma_notas = n.codigo_turma_notas
and n3.bimestre = '3 BIMESTRE') nota_3,
(select n4.nota
from notas n4
where n4.disciplina_notas = n.disciplina_notas
and n4.matricula_aluno_notas = n.matricula_aluno_notas
and n4.codigo_turma_notas = n.codigo_turma_notas
and n4.bimestre = '4 BIMESTRE') nota_4,
(select n5.nota
from notas n5
where n5.disciplina_notas = n.disciplina_notas
and n5.matricula_aluno_notas = n.matricula_aluno_notas
and n5.codigo_turma_notas = n.codigo_turma_notas
and n5.bimestre = '2 RECUPERACAO') nota_5,
(select n6.nota
from notas n6
where n6.disciplina_notas = n.disciplina_notas
and n6.matricula_aluno_notas = n.matricula_aluno_notas
and n6.codigo_turma_notas = n.codigo_turma_notas
and n6.bimestre = '3 RECUPERACAO') nota_6,
(select n7.nota
from notas n7
where n7.disciplina_notas = n.disciplina_notas
and n7.matricula_aluno_notas = n.matricula_aluno_notas
and n7.codigo_turma_notas = n.codigo_turma_notas
and n7.bimestre = '4 RECUPERACAO') nota_7
from notas n left join disciplina d on n.disciplina_notas = d.codigo
where n.matricula_aluno_notas =:MATRICULA_ALUNO
and n.codigo_turma_notas =:CODIGO_TURMA
group by n.disciplina_notas,
d.nome_disciplina,
n.matricula_aluno_notas,
n.codigo_turma_notas
into :CODIGO,
:NOME_DISCIPLINA,
:QTDE_NOTAS_ANO,
:nota1,
:nota2,
:nota3,
:nota4,
:nota5,
:nota6,
:nota7,
:MEDIA_BIM_GLOBAL,
:MEDIA_BIM_GLOBAL_FINAL
do
begin
begin
if ((NOTA1) <6> (NOTA1)) then
NOTA1 = NOTA5;
else
NOTA1 = NOTA1;
end
begin
if ((NOTA2) <6> (nota2)) then
NOTA2 = NOTA5;
else
NOTA2 = NOTA2;
end
begin
if ((NOTA3) <6> (nota3)) then
NOTA3 = NOTA6;
else
NOTA3 = NOTA3;
end
begin
if ((NOTA4) <6> (NOTA4)) then
NOTA4 = NOTA6;
else
NOTA4 = NOTA4;
end
media_bim_nao_arredonda = (nota1 + nota2 + nota3 + coalesce(nota4,0))/4;
media_bim_final = (media_bim_nao_arredonda + coalesce(nota7,0))/2;
/* -------------------------ESTE BLOCO--------------------------------------------
begin
FOR
select avg(MEDIA_BIM_GLOBAL),AVG(MEDIA_BIM_GLOBAL_FINAL)
from (select nota1 as noata_1,nota2 as noata_2,nota3 as noata_3,nota4 as noata_4,
sum(cast(nota1 + nota2 + nota3 as numeric(5,1)) + nota4)/ count(*) as media_bim_global,
coalesce(case when (nota1 + nota2 + nota3 + nota4) < 6 then
((cast(nota1 + nota2 + nota3 + nota4 as numeric(5,1)) * 2) + nota7) / 3
else (nota1 + nota2 + nota3 + nota4) end,0) as MEDIA_BIM_GLOBAL_FINAL,
end
ESTA PARANDO NESTE ULTIMO END.
----------------------------------------------------------------------------------------*/
begin
pega_decimal_saida = (nota1 + nota2 + nota3 + coalesce(nota4,0))/4 - trunc((nota1 + nota2 + nota3 + coalesce(nota4,0))/4);
begin
if (pega_decimal_saida < 0.3) then
media_bimestral = trunc((nota1 + nota2 + nota3 + nota4)/4);
else
if ((0.2 <pega_decimal_saida> pega_decimal_saida)) then
media_bimestral = trunc((nota1 + nota2 + nota3 + coalesce(nota4,0))/4) + 0.5;
else
media_bimestral = round((nota1 + nota2 + nota3 + coalesce(nota4,0))/4);
end
end
suspend;
end
end
Osmar
Posts
27/02/2013
Douglas
o bloco o qual você se refere com problemas,
na linha do else no final possui uma vírgula
retire esta vírgula e tente executar novamente.
Qualquer dúvida poste novamente !
08/03/2013
Osmar
Só hoje vi a resposta do tópico, já que a devmedia não mim notificou, quanto a vírgula desculpe ter postado com ela, mas já havia testado sem ela e para no mesmo local.
Agradeço-lhe pela dica.
Osmar.
09/03/2013
Perivaldo Martins
Só hoje vi a resposta do tópico, já que a devmedia não mim notificou, quanto a vírgula desculpe ter postado com ela, mas já havia testado sem ela e para no mesmo local.
Agradeço-lhe pela dica.
Osmar.
A estrutura não é
FOR <select-stmt> INTO <var> [, <var> ...] [AS CURSOR name] DO ...
Nesse caso não estaria faltando um DO?
Boa sorte e bons códigos!
Clique aqui para fazer login e interagir na Comunidade :)