Com a ajuda do colega Adriano Espinoza, construi essa Função:
CREATE OR REPLACE FUNCTION "public"."livrocaixa" (date, date) RETURNS
SETOF "public"."caixa" AS
$body$
declare
registros record;
begin
for registros in
SELECT cx.emissao, cx.historico, cx.entrada, cx.saida,
(SELECT sum(x.entrada)-sum(x.saida) FROM caixa AS x WHERE
x.idcaixa <= cx.idcaixa) as saldo
FROM caixa as cx where cx.emissao between $1 and $2 ORDER BY
cx.idcaixa
loop
return next registros;
end loop;
return;
end
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
Porém ao chamar essa função o seguinte erro ocorre:
ERROR: wrong record type supplied in RETURN NEXT
CONTEXT: PL/pgSQL function "livrocaixa" line 9 at return next
Alguém pode me ajudar ??
Adriano Espinoza de Oliveira escreveu:
Ivan veja se isto te ajuda:
-- consulta
select
q1.*,
saldo_cliente(q1.cliente, q1.codigo)
from
(
select
codigo, data, credito, debito, cliente
from
atc_saldo_clientes
where
cliente = 100
order by
movimento
) q1
--função
CREATE OR REPLACE FUNCTION "public"."saldo_cliente" (integer, integer)
RETURNS numeric AS
$body$
declare
v_cliente alias for $1;
v_codigo alias for $2;
v_saldo numeric;
begin
v_saldo :=
(
select
cast(cast(sum(debito)-sum(credito) as numeric(12,2)) as
numeric(12,2)) as total
from
<sua tabela>
where
cliente = v_cliente and
codigo <= v_codigo
);
return v_saldo;
end;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
Em 29/03/07, *Ivan Guimarães Meirelles* <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>> escreveu:
Olá Gustavo...
Agradeço pela atenção...
A função que vc me passou não retorna o saldo como esperado, o que
eu desejo é que a cada linha me traga o resultado de (entrada -
saida + saldo_anterior).
Observe a as tabelas que postei abaixo....
Gustavo Garay (Lista) escreveu:
CREATE FUNCTION calcula_saldo(INTEGER, INTEGER)
RETURNS INTEGER AS $$
SELECT $1 - $2;
$$
LANGUAGE 'SQL';
en la consulta vas a llamar asi
select campo1, campo2, calcula_saldo(entrada,salida) as saldo
from tutable
Gustavo
----- Original Message -----
*From:* Ivan Guimarães Meirelles <mailto:[EMAIL PROTECTED]>
*To:* Grupo de Usuários do PostgreSQL no Brasil
<mailto:[email protected]>
*Sent:* Thursday, March 29, 2007 10:49 AM
*Subject:* Re: [PostgreSQL-Brasil] Função para calcular saldo
do Caixa.
Sebastian Selau Webber Colombo escreveu:
jah que vc está começando com o pg, este artigo deve servir:
http://www.imasters.com.br/artigo/2065/postgresql/stored_procedures/
<http://www.imasters.com.br/artigo/2065/postgresql/stored_procedures/>
Obrigado Sebastian pela atenção...
Muito legal esses artigos, porém não resolvem a minha dúvida.
Tenho uma tabela CAIXA com dados a seguir:
*historico
* *entrada
* *saida
*
Venda de Pneus
1.800,00
0,00
Pagamento de Telefone
0,00
328,00
Aquisição de máquinas
0,00
750,00
Gostaria de escrever uma função que ao ser executada me
retorne o seguinte resultado:
*historico
* *entrada
* *saida
* *saldo
*
Venda de Pneus
1.800,00
0,00
1.800,00
Pagamento de Telefone
0,00
328,00
1.472,00
Aquisição de Máquinas
0,00
750,00
722,00
Ou seja, a função executaria um select na tabela CAIXA e para
cada linha retornada me informar o saldo.
Eu domino bem esse tipo de função (stored procedure) no
firebird, mas não achei nada que mostre o caminho de como
manipular as linhas retornadas de um select, uma-a-uma, no
PostgreSQL.
Se alguém puder me passar alguma dica, ficarei muito grato.
Um abraço a todos...
------------------------------------------------------------------------
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/
Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios