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

Responder a