consegui, com ajuda dos amigos aki.
 
--------------------------------------------------
 
CREATE OR REPLACE FUNCTION "public"."fn_estoque_produto" (numeric) RETURNS 
SETOF "pg_catalog"."record" AS$body$declare reg record; teste numeric; 
vn_c_produto alias for $1;begin  for reg in  select c_estoque, d_estoque,  
(select fn_saldo_produto(vn_c_produto,c_estoque)) as qtd      from tb_estoque 
loop       RETURN NEXT reg;  end loop; return; end;$body$LANGUAGE 'plpgsql' 
VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
 
----------------------------------------
 
depois deu problema para chamar a função....daí eu consegui fazendo o seguinte:
 
select * from fn_estoque_produto3_testar(1)as (c_estoque numeric(5,0), 
d_estoque varchar(40),qtd numeric(10,0))
---------------------------------------------------------------
 
quero agradecer ao Evandro e ao Rodrigo pela força.
 
que Deus abençôe a cada um de vcs.



Date: Fri, 19 Jan 2007 11:03:34 -0300From: [EMAIL PROTECTED]: [EMAIL 
PROTECTED]: Re: [PostgreSQL-Brasil] returnar mais de uma linha em function
Estranho, tente declarar reg da seguinte maneira:reg        
tb_estoque%ROWTYPE;Deve funcionar agora!Qual versão do postgresql você está 
utilizando?saulo Mendes wrote: 


 peço disculpas pela insistência e falta de intendimento no assunto. é que sou 
novato no Postgres. eu utilizava firebird mas o mesmo não tem esses conceitos. 
bom...para poder compilar eu fiz o seguinte: 
-------------------------------------------------------------CREATE OR REPLACE 
FUNCTION "public"."fn_estoque_produto3" (numeric) RETURNS SETOF 
"public"."tb_estoque" AS$body$declare reg record; vn_c_produto alias for 
$1;begin  for reg in  select c_estoque, d_estoque      from tb_estoque loop     
  RETURN NEXT reg;  end loop;end;$body$LANGUAGE 'plpgsql' VOLATILE CALLED ON 
NULL INPUT SECURITY INVOKER; ------------------------------------------------- 
mas ao executar houve o seguinte erro: ERROR:  wrong record type supplied in 
RETURN NEXTCONTEXT:  PL/pgSQL function "fn_estoque_produto3" line 6 at return 
next  


Date: Fri, 19 Jan 2007 08:11:04 -0300From: [EMAIL PROTECTED]: [EMAIL 
PROTECTED]: Re: [PostgreSQL-Brasil] returnar mais de uma linha em functionBom 
dia,Para fazer retornar mais de uma linha você deve fazer com que sua function 
retorne um tipo especifico. Você deve fazer o seguinte.CREATE OR REPLACE 
FUNCTION "public"."fn_estoque_produto" (numeric, out numeric, out varchar,
out numeric) RETURNS SETOF tb_estoque AS
$body$
declare
        reg record;
begin
         for reg in  select c_estoque, d_estoque from tb_estoque loop
                RETURN NEXT reg;
         end loop;

Return null;
end;
$body$
LANGUAGE 'plpgsql' No trecho RETURNS SETOF ..... você pode usar uma tabela, 
view ou criar um Type especifico para sua function ;)Você pode alterar o valor 
qq campo de que será retorna, para isso basta fazer reg.campo = valorEspero que 
consiga, qualquer duvida posta novamenteAttEvandrosaulo Mendes wrote: 
amigo rodrigo, agradeço a dica mas eu já tinha lido esse artigo(em português) 
mas, infelizmente, não consegui resolver.

se alguém tiver algo, um pouco mais detalhado eu agradeço.


________________________________
  
Date: Thu, 18 Jan 2007 20:52:45 -0200
From: [EMAIL PROTECTED]
To: [email protected]
Subject: Re: [PostgreSQL-Brasil] returnar mais de uma linha em function

RTFM [1]. :)
[1] 
http://www.postgresql.org/docs/8.2/interactive/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-RETURNING
--
Rodrigo Hjort
http://icewall.org/~hjort
2007/1/18, saulo Mendes <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> >:
Senhores, eu tenho a seguinte function
---------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION "public"."fn_estoque_produto" (numeric, out numeric, 
out varchar,
out numeric) RETURNS "pg_catalog"."record" AS
$body$
declare
 reg record;
 vn_c_produto ALIAS FOR $1;
 vn_c_estoque ALIAS FOR $2;
 vt_d_estoque ALIAS FOR $3;
 vr_saldo ALIAS FOR $4;
begin
 for reg in
  select c_estoque, d_estoque from tb_estoque loop
   vt_d_estoque = reg.d_estoque;
   vn_c_estoque = reg.c_estoque;
   vr_saldo = (select fn_saldo_produto(vn_c_produto,reg.c_estoque));
   end loop;
end;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
o problema é que essa função só me retorna uma linha e eu preciso, justamente, 
que a função me retorne todos os registros da tb_estoque.
agradeço a quem puder me ajudar nessa função.
    _________________________________________________________________
Busque em qualquer página da Web com alta proteção. Obtenha o Windows Live 
Toolbar GRATUITO ainda hoje!
http://toolbar.live.com/
_______________________________________________
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


  

Obtenha o novo Windows Live Messenger! Experimente! 
_______________________________________________
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
_________________________________________________________________
Busque em qualquer página da Web com alta proteção. Obtenha o Windows Live 
Toolbar GRATUITO ainda hoje!
http://toolbar.live.com/
_______________________________________________
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