*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