On 09-04-2015 14:59, Matheus de Oliveira wrote: > 2015-04-09 14:46 GMT-03:00 Fabrízio de Royes Mello <[email protected]> > : > >> use_sql := 'SELECT ($1).[FIELD]'; >> use_sql := replace( use_sql, '[FIELD]', quote_ident(p_field) ); >> >> > Nossa que horrível esse replace. >
Feio mesmo... kkkkk
>>
>> É uma PL antiga, dica do Pavel Stehule... até olhando pra ela dá pra dar
>> uma otimizada ali usando a função "format" pra criar o SQL dinâmico.
>>
>
> Realmente, mas mesmo sendo antigo me pergunto porque ele não concatenou ao
> invés de usar esse replace.
>
> De qualquer forma funciona, e é confiável. Mas para registro, eu usaria
> assim em versões mais recentes:
>
> CREATE FUNCTION pg_temp.get_field_from_record(p_record anyelement,
> p_field text)
> RETURNS text
> LANGUAGE PLPGSQL
> IMMUTABLE
> AS $$
> DECLARE
> v_ret text;
> BEGIN
> EXECUTE format('SELECT (($1).%I)::text', p_field) INTO v_ret
> USING p_record;
> RETURN v_ret;
> END;
> $$;
>
Esse código ficou bem mais elegante. Mas lembre-se que aquela do Pavel é
bem antiga, criada antes de existir o USING no "execute" e a função
"format" (que é uma mão na roda).
Att,
--
Fabrízio de Royes Mello Timbira - http://www.timbira.com.br/
PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
signature.asc
Description: OpenPGP digital signature
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
