Para vocë ter o retorno da função com o tipo public.caixa o registor criado
tem ser igual.
Pergunta: na estrutura de public.caixa vc tem exatametne os campos: emissao,
historico, entrada, saida e saldo?
Deve ser ai o problema.
Adriano
Em 29/03/07, Ivan Guimarães Meirelles <[EMAIL PROTECTED]> escreveu:
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]> 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 <[EMAIL PROTECTED]>
> *To:* Grupo de Usuários do PostgreSQL no Brasil<[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/
>
>
>
> 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
_______________________________________________
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