*A função completa (FUNCIONAL)*

-- DROP FUNCTION fn_verifica_lcto_ficha_avaliacao(integer, integer,
integer);
CREATE OR REPLACE FUNCTION fn_verifica_lcto_ficha_avaliacao(
  INOUT pCodTurma integer, INOUT pCodDisciplina integer, INOUT pCodProfessor
integer,
  OUT oPercLancadoB1 numeric, OUT oPercLancadoB2 numeric,
  OUT oPercLancadoB3 numeric, OUT oPercLancadoB4 numeric
  )
  RETURNS SETOF record AS
$BODY$DECLARE
 recTurma RECORD;  -- para utilização em consultas
 recLctos RECORD;  -- para utilização em consultas
 vCont    INTEGER;
BEGIN
  -- ESTA FUNÇÃO VERIFICA A SITUAÇÃO DE PENDÊNCIA DO MODELO DE AVALIACAO NO
PLANO DE ENSINO
  -- com a especificação que é só para um bimestre em específico
  select t.*
    into recTurma
  from sie_turma_disciplinaxprofessor td
    join turmas t on td.cod_turma=t.cod_turma
  where t.cod_turma=pCodTurma
   and td.cod_disciplina=pCodDisciplina
   and td.cod_professor=pCodProfessor
  limit 1;

  -- select td.*, t.* from sie_turma_disciplinaxprofessor td join turmas t
on td.cod_turma=t.cod_turma where t.cod_turma=1859 and td.cod_disciplina=496
and td.cod_professor=84;
  if not found then
    RAISE NOTICE 'Turma não localizada';
    return;
  end if;
  RAISE NOTICE 'Turma localizada % % %', recTurma.cod_curso,
recTurma.sedi_ano, recTurma.sedi_mes;

  vCont:=0;
  for recLctos IN
    select avg(
      case
         when sfar_av_nc='S' then 1
         when sfar_nota is not null then 1
         else 0 end
      )*100
       as lancada
       , pa.spensa_bimestre
      -- , fr.*,  ta.*,   pa.* --, pe.*
    from sie_planos_ensino pe
     join turma_alunos ta
       on pe.cod_turma=ta.cod_turma and pe.cod_disciplina=ta.cod_disciplina
and ativo='S'
     left outer join sie_planos_ensino_avaliacao pa
       on pe.spens_id=pa.spens_id
     left outer join sie_ficha_avaliacao_registro fr
       on pa.spens_id=fr.spens_id and pa.spensa_bimestre=fr.spensa_bimestre
       and pa.spensa_tipo=fr.spensa_tipo and
pa.spensa_data_prevista_seq=fr.spensa_data_prevista_seq
       and ta.cod_turma_aluno=fr.cod_turma_aluno
    where pe.cod_disciplina=pCodDisciplina
     and pe.cod_professor=pCodProfessor
     and pe.cod_curso=recTurma.cod_curso
     and pe.sedi_ano=recTurma.sedi_ano
     and pe.sedi_mes=recTurma.sedi_mes
     -- and ta.cod_turma_aluno=159607
    group by 2
    order by 2
  loop
    if recLctos.spensa_bimestre = 1 then
      oPercLancadoB1:=trunc(recLctos.lancada,1);
    end if;
    if recLctos.spensa_bimestre = 2 then
      oPercLancadoB2:=trunc(recLctos.lancada,1);
    end if;
    if recLctos.spensa_bimestre = 3 then
      oPercLancadoB3:=trunc(recLctos.lancada,1);
    end if;
    if recLctos.spensa_bimestre = 4 then
      oPercLancadoB4:=trunc(recLctos.lancada,1);
    end if;
    vCont:=vCont+1;
  end loop;
  return next;
  RAISE NOTICE ' Encontrados %',vCont;

END;$BODY$
  LANGUAGE 'plpgsql' VOLATILE;


*A consulta completa (sem o join com a função e com a devida alteração no
group by a consulta é funcional e está correta)*

select

'cadLancNotas.php?semestre='||t.sedi_ano||'-'||t.sedi_mes||'&codProfessor='||d.cod_professor||'&codTurma='||t.cod_turma||'&codDisciplina='||d.cod_disciplina||'&action=LISTA_TURMAS'
as link,
     e.sedi_ano, e.sedi_mes, e.sedi_periodo_identificacao, p.nome,
c.cod_curso, c.curso,
    di.cod_disciplina, di.disciplina, t.turma, t.cod_turma, c.num_medias,
count(ta.matricula) as matriculas,
     case when c.num_medias >0 then to_char(sum(case when nota_m1 is null
then 0 else 1 end),'9999') else '-' end as n1,
     case when c.num_medias >1 then to_char(sum(case when nota_m2 is null
then 0 else 1 end),'9999') else '-' end as n2,
     case when c.num_medias >2 then to_char(sum(case when nota_m3 is null
then 0 else 1 end),'9999') else '-' end as n3,
     case when c.num_medias >3 then to_char(sum(case when nota_m4 is null
then 0 else 1 end),'9999') else '-' end as n4,
     case when c.num_medias >4 then to_char(sum(case when nota_m5 is null
then 0 else 1 end),'9999') else '-' end as n5,
     sum(case when aprovado='0' and fez_exame<>'S' then 1 else 0 end) as
a_fazer_exame,
     sum(case when fez_exame='S' then 1 else 0 end) as ja_fez_exame,
     sum(case when aprovado='1' then 1 else 0 end) as aprovados ,
     f.*
  from sie_edicao e
    JOIN turmas t
    ON e.sedi_ano=t.sedi_ano and e.sedi_mes=t.sedi_mes and
e.cod_curso=t.cod_curso
      JOIN turma_disciplinas d
      ON t.cod_turma=d.cod_turma
        JOIN professores p
        ON d.cod_professor=p.cod_professor
          JOIN disciplinas di
          ON d.cod_disciplina=di.cod_disciplina
            JOIN cursos c
            ON e.cod_curso=c.cod_curso
              JOIN turma_alunos ta
              ON d.cod_turma=ta.cod_turma and
d.cod_disciplina=ta.cod_disciplina
                LEFT OUTER JOIN notas n
                ON t.cod_curso=n.cod_curso and ta.matricula=n.matricula and
ta.cod_disciplina=n.cod_disciplina
                  -- LEFT OUTER JOIN
fn_verifica_lcto_ficha_avaliacao(t.cod_turma,di.cod_disciplina,d.cod_professor)
f
                  -- LEFT OUTER JOIN
fn_verifica_lcto_ficha_avaliacao(t.cod_turma,di.cod_disciplina,d.cod_professor)
f on f.pCodDisciplina=t.cod_turma and f.pCodTurma=di.cod_disciplina and
f.pCodProfessor=d.cod_professor
                  --LEFT OUTER JOIN
fn_verifica_lcto_ficha_avaliacao(t.cod_turma,di.cod_disciplina,d.cod_professor)
f on f.pCodDisciplina=t.cod_turma and f.pCodTurma=di.cod_disciplina and
f.pCodProfessor=d.cod_professor
                  -- LEFT OUTER JOIN
fn_verifica_lcto_ficha_avaliacao(1726,496,84) f on
f.pCodDisciplina=t.cod_turma and f.pCodTurma=di.cod_disciplina and
f.pCodProfessor=d.cod_professor
                  LEFT OUTER JOIN fn_verifica_lcto_ficha_avaliacao() f on
f.pCodDisciplina=t.cod_turma and f.pCodTurma=di.cod_disciplina and
f.pCodProfessor=d.cod_professor
 where  to_date('15/12/2009','dd/mm/yyyy') between e.sedi_dt_inicio_edicao
and e.sedi_dt_final_edicao
 and e.cod_curso = 9
 and ta.ativo='S'
  group by 1, e.sedi_ano, e.sedi_mes, e.sedi_periodo_identificacao,
c.cod_curso, c.curso, p.nome, di.cod_disciplina, di.disciplina, t.turma,
t.cod_turma, c.num_medias,
  pCodTurma, pCodDisciplina, pCodProfessor, oPercLancadoB1, oPercLancadoB2,
oPercLancadoB3, oPercLancadoB4
  order by e.sedi_ano, e.sedi_mes, e.sedi_periodo_identificacao,
c.cod_curso, c.curso, p.nome, di.cod_disciplina, di.disciplina, t.turma
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a