Re: [pgbr-geral] erro funcao

2008-08-14 Por tôpico Osvaldo Rosario Kussama
Daniel P Lim escreveu:
> O que há de errado com essa função:
> 
> CREATE OR REPLACE FUNCTION buscar_pessoa(text)
>   RETURNS SETOF tb_pessoa AS
> $BODY$
> declare
>   texto text;
>   linha tb_pessoa%ROWTYPE;
> begin
>   texto = replace(replace(ltrim(rtrim($1)), '', ''), '', '&');
>   for linha in
> select nomecompleto from tb_pessoa
> where nomecompleto ilike ( texto)
>   loop
> return next linha;
>   end loop;
>   return;
> end
> $BODY$
>   LANGUAGE 'plpgsql' VOLATILE;
> 
> retorna o seguinte erro:
> 
> ERRO:  função que tem argumento do tipo conjunto foi chamada em um 
> contexto que não pode aceitar um conjunto
> CONTEXT:  PL/pgSQL function "buscar_pessoa" while casting return value 
> to function's return type
> 


Toda função que retorna um SETOF deve ser chamada da seguinte forma:
SELECT * FROM funcao();
já que ela pode retornar múltiplas linhas.

Verifique se é isso.

Osvaldo

PS.: Não entendi a expressão replace(ltrim(rtrim($1)), '', ''). Você 
quer substituir uma string vazia por uma string vazia ou existe um 
erro de transcrição?
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] erro funcao

2008-08-14 Por tôpico Daniel P Lim
O que há de errado com essa função:

CREATE OR REPLACE FUNCTION buscar_pessoa(text)
  RETURNS SETOF tb_pessoa AS
$BODY$
declare
  texto text;
  linha tb_pessoa%ROWTYPE;
begin
  texto = replace(replace(ltrim(rtrim($1)), '', ''), '', '&');
  for linha in
select nomecompleto from tb_pessoa
where nomecompleto ilike ( texto)
  loop
return next linha;
  end loop;
  return;
end
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;

retorna o seguinte erro:

ERRO:  função que tem argumento do tipo conjunto foi chamada em um contexto 
que não pode aceitar um conjunto
CONTEXT:  PL/pgSQL function "buscar_pessoa" while casting return value to 
function's return type


  Novos endereços, o Yahoo! que você conhece. Crie um email novo com a sua 
cara @ymail.com ou @rocketmail.com.
http://br.new.mail.yahoo.com/addresses___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral