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