Olá,
2009/12/21 Rudinei Dias <[email protected]>
> *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
>
> Pelo que percebi você está passando para a função dados de uma tabela como
> parâmetro de entrada e isso não vai dar certo, a menos que você processe
> primeiro a consulta da tabela e o resultado seja passado como parâmetro para
> a função.
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
[]s
--
JotaComm
http://jotacomm.wordpress.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral