Em 18 de agosto de 2011 15:34, Roseane Falcao <[email protected]>escreveu:
>
> <corte>
>
> EXECUTE ('INSERT INTO x.LOG (
> logtabela
> ,logpk
> ,logtransacao
> ,logdata
> ,logusrid
> ,logcoluna
> ,logvlrantigo
> ,logvlrnovo
> )
> VALUES (
> '||TG_TABLE_SCHEMA||'.'||TG_TABLE_NAME||'
> , '||OLD.idexecucao||'
> , '||substring(TG_OP from 1 for 1)||'
> , CURRENT_TIMESTAMP(2)
> , NULL
> , '||rec.coluna||'
> , CAST (OLD.'||rec.coluna||' as character) -- rec.coluna tem como
> valor o NOME da minha coluna
> , CAST (NEW.'||rec.coluna||' as character)');
>
> <corte>
>
>
Você pode utilizar o EXECUTE...USING... [1]... algo tipo:
EXECUTE 'INSERT INTO log(tabela, valor_old, valor_new) VALUES ($1, $2)'
USING TG_TABLE_SCHEMA||'.'||TG_TABLE_NAME, OLD.campo, NEW.campo;
Eu simplifiquei para mostrar como faz, dai é só vc adaptar o seu EXECUTE.
Mais um detalhe, essa opção está disponível apartir do PostgreSQL 8.4.
Versões anteriores tem que fazer diferente.
[1]
http://www.postgresql.org/docs/9.0/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN
--
Fabrízio de Royes Mello
Consultoria/Coaching PostgreSQL
>> Blog sobre TI: http://fabriziomello.blogspot.com
>> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
>> Twitter: http://twitter.com/fabriziomello
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral