Salve, senhores.

Ficou assim:
CREATE TYPE saldo_caixa AS (
   saldo_anterior numeric(18,2),
   debito numeric(18,2),
   credito numeric(18,2),
   saldo numeric(18,2),
   inicio date,
   fim date
  );

CREATE OR REPLACE FUNCTION saldocaixa(date, date) RETURNS SETOF 
saldo_caixa AS
$body$
DECLARE
   debito_ant NUMERIC(18,2);
   credito_ant NUMERIC(18,2);
   debito_atual NUMERIC(18,2);
   credito_atual NUMERIC(18,2);
   linha saldo_caixa;

begin
   linha.saldo_anterior := 0;
   linha.debito := 0;
   linha.credito := 0;
   linha.saldo := 0;

   SELECT INTO debito_atual SUM(value_cash) FROM cashes WHERE 
(type_cash= 'D' and date_cash between $1 and $2);
   SELECT INTO credito_atual SUM(value_cash) FROM cashes WHERE 
(type_cash= 'C' and date_cash between $1 and $2);
   SELECT INTO credito_ant SUM(value_cash) FROM cashes WHERE (type_cash= 
'C' and date_cash < $1 );
   SELECT INTO debito_ant SUM(value_cash) FROM cashes WHERE (type_cash= 
'D' and date_cash < $1 );

   if credito_atual is null then credito_atual = 0; end if;
   if debito_atual is null then debito_atual = 0; end if;
   if credito_ant is null then credito_ant = 0; end if;
   if debito_ant is null then debito_ant = 0; end if;

   linha.saldo_anterior = (credito_ant - debito_ant);
   linha.debito = debito_atual;
   linha.credito = credito_atual;
   linha.saldo = linha.saldo_anterior - (credito_atual - debito_atual);
   linha.inicio = $1;
   linha.fim = $2;
   return next linha;
RETURN;
END
$body$
LANGUAGE 'plpgsql';

Aí chamo: select * from saldocaixa('2012-09-18', '2012-09-18').

Estou utilizando com rails em um projeto: http://siga.herokuapp.com/.
Breve coloco o código no github.

Obrigado a todos.

[]'s

Stclara.


Em 18-09-2012 17:06, Irineu escreveu:
> Em 18/09/2012 15:26, Stclara escreveu:
>> Salve, pessoal. Estou precisando desenvolver uma função para retornar
>> saldo e comecei desta maneira, mas não retorna dados:
>>
>> Criei um type:
>> CREATE TYPE saldo_caixa AS (
>>      debito numeric(18,2)
>>     );
>>
>> A função:
>> CREATE OR REPLACE FUNCTION saldocaixa() RETURNS SETOF saldo_caixa AS
>> $body$
>> DECLARE
>>      debito_atual NUMERIC(18,2);
>>      linha saldo_caixa;
>> begin
>>      SELECT INTO debito_atual SUM(value_cash) FROM cashes WHERE
>> (type_cash= 'D');
>>      linha.debito = debito_atual;
>> RETURN;
>> END
>> $body$
>> LANGUAGE 'plpgsql';
>>
>>
> uma outra possibilidade:
>
> CREATE OR REPLACE FUNCTION saldocaixa()
>    RETURNS SETOF saldo_caixa AS
> $body$
> DECLARE
>      debito_atual NUMERIC(18,2);
>      linha saldo_caixa;
> begin
>    RETURN Query SELECT SUM(value_cash)::NUMERIC(18,2) FROM cashes WHERE 
> (type_cash= 'D');
> END
> $body$
> LANGUAGE 'plpgsql';
>
>
>

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a