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
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a