Olá,

Em 19 de abril de 2010 15:38, Wagner Santos <[email protected]>escreveu:

> Obrigado pela ajuda de todos.
> Baseado nos exemplos minha trigger seria algo parecido com :
> -- Function: process_tb_audit()
>
> -- DROP FUNCTION process_tb_audit();
>
> CREATE OR REPLACE FUNCTION process_tb_audit()
>   RETURNS trigger AS
> $BODY$
>     BEGIN
>         --
>         -- Create a row in emp_audit to reflect the operation performed on
> emp,
>         -- make use of the special variable TG_OP to work out the
> operation.
>         --
>         IF (TG_OP = 'DELETE') THEN
>             INSERT INTO audit SELECT user, now(),OLD.gid;
>             RETURN OLD;
>         ELSIF (TG_OP = 'UPDATE') THEN
>             INSERT INTO audit SELECT user, now(),NEW.gid;
>             RETURN NEW;
>         ELSIF (TG_OP = 'INSERT') THEN
>             INSERT INTO audit SELECT user, now(),NEW.gid;
>             RETURN NEW;
>         END IF;
>         RETURN NULL; -- result is ignored since this is an AFTER trigger
>     END;
> $BODY$
>   LANGUAGE 'plpgsql' VOLATILE
>   COST 100;
> ALTER FUNCTION process_tb_audit() OWNER TO "admin";
>
>
> Porém, algumas modificacoes são necessárias para que eu possa usá-la
> corretamente:
> Ao invés de: INSERT INTO audit SELECT user, now(),NEW.gid;
>
> Gostaria de pegar o nome da tabela sendo alterada, por exemplo:
> INSERT INTO $TABELA$ SELECT user, now(),NEW.gid;
>

Você vai ter que usar SQL dinâmico para fazer isso. A variável que pega o
nome da tabela é TG_TABLE_NAME.


>
> É possivel?
>
> Um outro detalhe, esse teste que estou fazendo está inserindo em uma outra
> tabela (audit) gostaria de fazer um update na tabela atual com o nome de
> usuario e a data, seria assim:
> UPDATE $TABELA$ set usuario=SELECT user, set dataAlter= now() where ????
>
> E o que eu coloco no where?
>

Como você identifica o registro que está sendo alterado? Esta é a condição
que você deve colocar no WHERE.

>
> Obrigado!
>
> ----------
> Wagner Santos
> MSN/Gtalk: [email protected]
> Site: http://www.geracaoelias.blog.br
> meadiciona:http://meadiciona.com/wagnergsantos/
>
>
> 2010/4/19 Osvaldo Kussama <[email protected]>
>
> Em 19 de abril de 2010 14:43, Wagner Santos <[email protected]>
>> escreveu:
>> > Caros,
>> > Nas minhas tabelas tem um campo com o nome de usuario para indicar quem
>> fez
>> > a ultima alteracao ou insercao na base.
>> > Gostaria que quanto um uma determinada linha da tabela fosse alterada,
>> essas
>> > informações fossem gravadas na base.
>> > Imagino que isso seja possível com uma trigger, mas como fazer?
>> > Vou ter que criar uma trigger por tabela ou posso criar uma para todo o
>> > banco?
>> > Por ultimo, como pegar o nome do usuário logado no banco.
>> > Obrigado,
>> > ----------
>>
>>
>> Dê uma olhada no exemplo 38-4 em:
>> http://www.postgresql.org/docs/current/interactive/plpgsql-trigger.html
>>
>> Uma trigger é definida apenas para tabela, mas você pode ter a mesma
>> função referenciada em diversas triggers.
>>
>> Quanto ao usuário logado, e outras coisas de interesse, veja:
>> http://www.postgresql.org/docs/current/interactive/functions-info.html
>>
>> Osvaldo
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>

[]s
-- 
JotaComm
http://jotacomm.wordpress.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a