On 09-04-2015 13:41, Douglas Fabiano Specht wrote:
> Em 9 de abril de 2015 12:01, Matheus de Oliveira <[email protected]>
> escreveu:
> 
>>
>> 2015-04-09 11:51 GMT-03:00 Douglas Fabiano Specht <
>> [email protected]>:
>>
>>> com o nome do campo da PK da tabela, precisaria atribuir o valor do NEW
>>> deste Campo para uma variável,
>>>
>>> valorpk:=new.campopk;
>>>
>>> tentei concatenar, converter, mas nada...
>>> alguma dica?
>>>
>>> Postgres 9.4.1 com windows
>>>
>>
>> É bem fácil fazer este tipo de operação com json/jsonb, exemplo:
>>
>>     valor := to_json(NEW)->>campopk
>>
> 
> deu certo..obrigado
> 

Vc ainda pode usar essa PL pra fazer isso que precisa:

CREATE OR REPLACE FUNCTION get_field_from_record(p_record ANYELEMENT,
p_field TEXT) RETURNS TEXT as $$
DECLARE
    use_sql TEXT;
    reply TEXT;
BEGIN
    use_sql := 'SELECT ($1).[FIELD]';
    use_sql := replace( use_sql, '[FIELD]', quote_ident(p_field) );
    EXECUTE use_sql INTO reply using p_record;
    RETURN reply;
END;
$$ language plpgsql;


Dai vc pode usar assim:

...
valor := get_field_from_record(NEW, 'nome_do_campo');
...

É 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.

Uso há muitos anos ela. ;-)


Att,



-- 
   Fabrízio de Royes Mello         Timbira - http://www.timbira.com.br/
   PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a