Pular para o conteúdo
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #105611
    bruno_dba
    Participante

      olá pessoal

      não sou bom em PL/SQL, estou precisando criar uma trigger que dispare para uma tabela de log todos eventos de insert em um determinado campo de uma tabela, detalhe esse campo grava informações de observações.

      na tabela de log preciso gravar a informação gravada, usuario, maquina, programa, hora do insert etc alguem teria um exemplo para me ajudar ?

      abs

      #105615
      Fábio Prado
      Participante

        @bruno_dba

        Utilizo o script abaixo em meus treinamentos de PL/SQL (http://www.fabioprado.net/2010/11/recuperando-dados-da-sessao-de-usuario.html.

        -- criando a trigger
        create or replace TRIGGER HR.TR_EMPLOYEES_LOG
        AFTER INSERT OR DELETE ON HR.EMPLOYEES
        REFERENCING OLD AS LA NEW AS LN
        FOR EACH ROW
        DECLARE
        V_OPERACAO VARCHAR2(20);
        BEGIN
        V_OPERACAO:= CASE WHEN DELETING THEN 'DELETE' ELSE 'INSERT' END;
        -- insere historico de cargos anteriores do empregado
        INSERT INTO HR.LOG_EMPREGADOS
        (ID, DT_INCLUSAO, NM_USER, TP_OPERACAO)
        VALUES
        (DECODE(V_OPERACAO,'INSERT',:LN.EMPLOYEE_ID,:LA.EMPLOYEE_ID), SYSDATE, USER, V_OPERACAO);
        EXCEPTION
        WHEN OTHERS THEN
        NULL;
        END;
        /

        #105628
        bruno_dba
        Participante

          Muito obrigado @fbifabio

          com seu exemplo criei a trigger abaixo, funcinou legal em teste, mas quando crio em produção, gera locks com os usuarios que estão inserindo pedidos na tabela.

          CREATE OR REPLACE TRIGGER “teste”.”TESTE”
          after insert on teste
          referencing new as new
          for each row
          begin
          if :new.obs is not null
          then
          insert into audit_log
          (new_obs,alterado,quando,maquina, osuser)
          values
          (:new.obs, user, sysdate, sys_context(‘USERENV’,’HOST’),sys_context(‘USERENV’,’O
          S_USER’));
          end if;
          end teste;

          Testando

          inseri um registro na tabela

          SQL> insert into teste values (‘teste para gravar na trigger’, ‘teste’);

          1 row created.

          SQL> commit;

          Commit complete.

          fiz o select na tabela de log;

          NEW_OBS ALTERADO QUANDO MAQUINA OSUSER


          teste para gravar na trigger TESTE 28/06/13 srvoracle01 oracle

          a tabela em produção tem mais de 60 campos é uma das mais utilizadas, será que tem algo na trigger que posso alterar ?

          mais uma vez obrigado

          abs

        Visualizando 3 posts - 1 até 3 (de 3 do total)
        • Você deve fazer login para responder a este tópico.
        plugins premium WordPress