Evandro Ricardo Silvestre escreveu:
> Rubens José Rodrigues wrote:
>> Pessoal,
>>
>> Até achei na internet algo que explicasse como criar funções mas
>> sinceramente não consegui e não entendi, vou passar o cenário e depois a
>> necessidade :
>>
>> Cenário :
>>
>> PG :=> PostgreSQL 8.2.4 on i686-pc-linux-gnu, compiled by GCC gcc (GCC)
>> 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)
>>
>>
>> Cenário :
>>
>> TABELA A TABELA B
>> CODUSUARIO SEQ
>> NOMEUSUARIO CODUSUARIO REF TABELA A (CODUSUARIO)
>> DATA
>> DESCRICAOSERVICO
>> VALOR
>>
>>
>> Necessidade :
>>
>> Criar uma function passando como parâmetro de entrada o período (x,y)
>> fizesse um sum nos valores entre o período x e y e retornasse :
>>
>> Exemplo de retorno :
>>
>> CODUSUARIO | NOME | VALOR
>> 001 RUBENS 1.00
>> 002 JOSE 1.10
>> 003 RODRIGUES 1.20
>>
> No seu caso é necessário criar um TYPE, assim por exemplo:
>
> CREATE TYPE Meu_Tipo AS
> (codusuario character varying(3),
> nome character varying(200),
> valor numeric(20,2));
>
> Depois crie a stored procedure que irá retornar da seguinte maneira:
>
> CREATE OR REPLACE FUNCTION sp_teste()
> RETURNS SETOF Meu_Tipo AS
>
> Atente para o RETURNS SETOF.
>
> Para retornar mais de um registro, basta utilizar o RETURN NEXT.
>
> Expliquei meio por cima, tenta fazer, se não conseguir ou tiver duvidas
> reporte na lista novamente que continuamos te ajudando.
>
Só para dar o serviço completo:
CREATE FUNCTION sua_funcao(inicio date, final date) RETURNS SETOF
seu_tipo AS $$
SELECT tab_a.codusuario, tab_a.nome, sum(valor)
FROM tab_a JOIN tab_b USING(codusuario)
WHERE tab_b.data BETWEEN $1 AND $2
GROUP BY codusuario, nome
ORDER BY codusuario;
$$ LANGUAGE SQL;
Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral