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.



>
> É 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;
    $$;

Talvez ate RETURN QUERY, sei lá.

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a