Roseane,
Acho que vc está cometendo algum erro, pelo meu entender os valores :
NEW – Para INSERT e UPDATE
OLD – Para DELETE

Já que vc está fazendo insert, vc não terá valor OLD.

[1] - http://www.postgresql.org/docs/9.0/static/plpgsql-trigger.html

[]'s
Victor Hugo

Em 18 de agosto de 2011 15:34, Roseane Falcao
<[email protected]> escreveu:
> Pessoal, estou tentando receber o valor OLD e NEW de uma coluna que seu nome
> está armazenado em uma variável. Tentei através de um SQL dinâmico mas não
> deu certo. Preciso de ajuda para resolver este problema. Aí vai o trecho de
> código que quero fazer funcionar.
> Qualquer ajuda é bem vinda.
> CREATE OR REPLACE FUNCTION x.log_table()
>   RETURNS "trigger" AS
>  $BODY$
> DECLARE
> rec RECORD;
> BEGIN
>     FOR rec IN SELECT
> pg_namespace.nspname as schema,
> pg_class.relname as tabela,
> pg_attribute.attname  AS coluna,
> pg_type.typname
> FROM pg_class
> JOIN pg_namespace ON pg_class.relnamespace = pg_namespace.oid AND
> pg_namespace.nspname not in ('information_schema', 'pg_catalog','pg_toast')
> AND pg_class.relkind = 'r'
> JOIN pg_attribute ON pg_attribute.attrelid=pg_class.oid
> JOIN pg_type ON pg_attribute.atttypid = pg_type.oid
> where pg_namespace.nspname = TG_TABLE_SCHEMA
> and pg_class.relname = TG_TABLE_NAME
> and pg_type.typname not in ('oid','cid','xid','tid')
> ORDER BY pg_namespace.nspname, pg_class.relname
> LOOP
>
> 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)');
> END LOOP;
>     RETURN NEW;
>     END;
>   $BODY$
>   LANGUAGE 'plpgsql' VOLATILE;
>
> Ao rodar deu o seguinte erro:
> ERROR: OLD used in query that is not in a rule
> SQL state: 42601
> Contexto: SQL statement "INSERT INTO x.LOG (
> logtabela
> ,logpk
> ,logtransacao
> ,logdata
> ,logusrid
> ,logcoluna
> ,logvlrantigo
> ,logvlrnovo
> )
> VALUES (
> x.execucao
> , 3
> , U
> , CURRENT_TIMESTAMP(2)
> , NULL
> , assunto
> , CAST (OLD.assunto as character)
> , CAST (NEW.assunto as character)"
> PL/pgSQL function "log_execucao" line 26 at execute statement
> Desde já, agradeço.
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>



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

Responder a