ERRATA.... NEW – Para INSERT e UPDATE OLD – Para DELETE e UPDATE []'s Victor Hugo
Em 18 de agosto de 2011 15:41, Victor Hugo <[email protected]> escreveu: > 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 > -- []´s Victor Hugo _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
