Ivan Guimarães Meirelles 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
> 



Você está retornando registros do tipo caixa (tipo associado a sua 
tabela). Pelo que você dá a entender este tipo não contém o campo saldo 
(mão é um campo de sua tabela). Solução: crie um tipo com o que deseja 
retornar e utilize-o em sua função.

Veja o primeiro exemplo em:
http://www.postgresql.org/docs/8.2/interactive/sql-createtype.html

[]s
Osvaldo

_______________________________________________
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

Responder a