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