Em Qui, 2013-05-16 às 11:24 -0300, Erison Gmail escreveu: > Bom dia amigos, > Venho através deste pedir ajuda com documentação, e exemplos
[.. corte ..]
> Já fiz algumas outras funções mas estou com dificuldade em trabalhar com
> laços e resultados de consultas dentro da função
>
> Exemplo, selecionar todas as notas de uma turma, e para cada aluno fazer a
> media dele, e depois ao final a media da turma...
Talvez porque você esteja utilizando um martelo para pregar um parafuso.
Se o seu problema for um parafuso, a sua chave-de-fenda seria o SQL.
A maioria dos desenvolvedores acabam pensando na resolução dos problema
de maneira imperativa, mas quando você tem em sua mala de ferramentas
outros paradigmas é possível abrir mão dos 'for/while/if' e partir para
uma linguagem declarativa onde não importa "como" você quer e sim "o
quê" você quer.
Não sei quais são os padrões de trabalho que são impostos para você
nesta sua tarefa, entretanto, uma excelente alternativa seria utilizar
SQL.
Isto é um exemplo de algo que poderia funcionar para você:
alunos
------
cod nome
1 JOAO
2 PEDRO
3 MARIA
4 MARCIA
turmas
------
sigla nome
POR PORTUGUES
MAT MATEMATICA
alunos_matriculados
-------------------
cod_aluno sigla_turma
1 POR
2 POR
3 POR
1 MAT
2 MAT
3 MAT
4 MAT
notas
-----
prova cod_aluno sigla_turma valor
1 1 POR 10
1 2 POR 7
1 3 POR 9
2 1 POR 8
2 2 POR 8
2 3 POR 10
1 1 MAT 6
1 2 MAT 7
1 3 MAT 8
1 4 MAT 8
Uma consulta que poderia trazer alguns dados interessantes seria:
---
select
aluno.nome,
turma.nome,
nota.prova,
avg(nota.valor) as media,
max(nota.valor) as maior_nota_turma,
min(nota.valor) as menor_nota_turma
from alunos_matriculados
join alunos aluno
on (alunos_matriculados.cod_aluno = aluno.cod)
join turmas turma
on (alunos_matriculados.sigla_turma = turma.sigla)
join notas nota using (cod_aluno, sigla_turma)
group by aluno.nome, turma.nome, nota.prova;
---
Faça uns testes com SQL antes de partir para uma solução imperativa e
você terá menos problemas.
Veja que você poder fazer um laço no resultado dessa consulta [1] se
quiser.
[1]
http://www.postgresql.org/docs/current/static/plpgsql-control-structures.html#PLPGSQL-RECORDS-ITERATING
[]s
--
Dickson S. Guedes
mail/xmpp: [email protected] - skype: guediz
http://guedesoft.net - http://www.postgresql.org.br
http://www.rnp.br/keyserver/pks/lookup?search=0x8F3E3C06D428D10A
signature.asc
Description: This is a digitally signed message part
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
