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
