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

Responder a