procedure com média, erro...

26/02/2013

1

Amigos,

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
Responder

Posts

27/02/2013

Douglas

Osmar,

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 !
Responder

08/03/2013

Osmar

Douglas,
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.
Responder
Douglas,
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!
Responder