2009/6/15 Leandro Barbosa Silva <[email protected]>:

<corte>
> São apenas 4 questões, que para quem está habituado com o PostgreSQL,
> creio que não será tão difícil quanto é para mim.

É engraçado. Eu julgo que num curso *técnico* o aluno deveria aprender
a fazer as coisas certas desde a modelagem dos dados, porém a forma
como os exercícios foram propostos foram no mínimo questionáveis, a
começar pela organização dos dados nas tabelas.

> Responda as seguintes questões:
>
> 1)      Crie uma função que receba como parâmetro o numero de um
> departamento e retorne o total de horas trabalhadas pelo gerente.

SELECT SUM(a.horas_trabalhadas)
   FROM atividdes a
      JOIN projeto p ON (a.id_projeto = p.id)
      JOIN dptos d ON (p.id_dpto = d.id)
 WHERE d.id = $1
 GROUP BY a.horas_trabalhas;

> 2)      Crie uma função que some as horas trabalhadas de cada projeto
> e apresente a duração das mesmas em dias.

SELECT    TO_CHAR(interval SUM(horas_trabalhadas)/24,'HH24')
   FROM atividades a JOIN projetos p ON (a.id_projeto = p.id)
 GROUP BY a.id_projeto, horas_trabalhdas;

<corte>

Apenas exemplifiquei essas duas consultas pra voce entender que não é
necessário utilizar funções para extrair tal conteúdo dessas tabelas e
sinceramente, a não ser que voce precise agrupar blocos lógicos com
regras de negócios e/ou utilizar restrições de segurança de acesso aos
dados que simples DCLs não resolvam, voce provavelmente não vai querer
utilziar funções pra isso.

Como dica, voce poderia utilizar funções utilizando a linguagem SQL
que não precisam carregar o processador de linguagens procedurais
(plpgsql). e.g.:

CREATE FUNCTION foobar(ID INTEGER)
LANGUAGE 'sql'
RETURN INTEGER AS
$foobar$

   SELECT 1 FROM DUAL; -- aqui vai seu SELECT criadoacima

$foobar$;

Abraço!

-Leo
-- 
Leonardo Cezar
http://www.aslid.org.br
http://postgreslogia.wordpress.com
http://www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a