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
