Pular para o conteúdo

Fóruns SQL e PL/SQL Dúvida Expressões Regulares – Replace (REGEXP_REPLACE) Dúvida Expressões Regulares – Replace (REGEXP_REPLACE)

#97575
gsmdf
Participante

    Pessoal,

    Adcionei a ultima parte da trigger, com VALUES ( …. ao texto.
    Ficou assim :

    DROP TRIGGER TCU.TR_ACAO;

    CREATE OR REPLACE TRIGGER TCU.TR_ACAO AFTER INSERT OR UPDATE OR DELETE

    ON TCU.ACAO
    FOR EACH ROW

    /*

    Cria trigger para tabela TCU.ACAO

    Data - 22/7/2010 - 14:00:16

    */

    --

    -- 01/10/2003 - Autor: Paulo César

    -- Alterações:

    -- Inclusão da variável V_UsuarioAtualizacao assumindo USER do Oracle

    -- Inclusão de nova coluna USUARIO_ORACLE no Audit

    -- Decisão da Mônica, Fábio, Mauricio R. e PC

    --
    DECLARE

    V_ChangeType CHAR(1);

    V_UsuarioAtualizacao CHAR(20);

    V_OSUSER VARCHAR2(20);

    V_MAQUINA VARCHAR2(65);

    BEGIN

    SELECT DISTINCT OSUSER, MACHINE INTO V_OSUSER, V_MAQUINA

    FROM V$SESSION

    WHERE AUDSID = USERENV(''SESSIONID'')

     AND STATUS IN (''ACTIVE'',''INACTIVE'')
    

    ;

    V_UsuarioAtualizacao:= USER;

    IF PKG_AUDIT.COD_USUARIO IS NOT NULL THEN

     V_UsuarioAtualizacao := PKG_AUDIT.COD_USUARIO;
    

    END IF;

    /* I=Insert, D=Delete, U=Update */

    IF INSERTING THEN

      V_ChangeType := ''I'';
    

    ELSE

      IF UPDATING THEN
    
         V_ChangeType := ''U'';
    
      ELSE
    
         V_ChangeType := ''D'';
    
      END IF;
    

    END IF;

    INSERT INTO AUDIT_TCU.ACAO

    (

       V_NUM_DIAS_PREVISTO
    
      , V_DTHORA_INICIO
    
      , V_DTHORA_TERMINO
    
      , V_TIPO
    
      , V_SE_DATA_ESTIMADA
    
      , V_SE_HORA_ESTIMADA
    
      , V_COD
    
      , N_COD
    
      , OPERACAO_EFETUADA
    
      , DTHORA_ATUALIZACAO
    
      , USUARIO_ATUALIZACAO
    
      , OSUSER
    
      , MAQUINA
    
      , USUARIO_ORACLE
    

    ) VALUES (

       :OLD.NUM_DIAS_PREVISTO
    
      , :OLD.DTHORA_INICIO
    
      , :OLD.DTHORA_TERMINO
    
      , :OLD.TIPO
    
      , :OLD.SE_DATA_ESTIMADA
    
      , :OLD.SE_HORA_ESTIMADA
    
      , :OLD.COD
    
      , :NEW.COD
    
      , V_ChangeType
    
      , SYSDATE
    
      , V_UsuarioAtualizacao
    
      , V_OSUSER
    
      , V_MAQUINA
    
      , USER
    

    );

    END;
    /

    Ai quando usei a exp reg regexp_replace(texto,’DROP([[:print:]|[:cntrl:]])INSERT INTO AUDIT_TCU.ACAO([[:print:]|[:cntrl:]])(‘)
    ele retorna há partir de :OLD.NUM_DIAS_PREVISTOS pra baixo…ele só ta parando no segundo ( após insert into.
    Como arrumo essa exp reg para funcionar para qualquer outro nome de tabela que não seja ACAO (AUDIT_TCU.ACAO) pois poderia ser (AUDIT_TCU.NOME_OUTRA_TABELA) e ao mesmo tempo retornar esta parte do texto:

    V_NUM_DIAS_PREVISTO

      , V_DTHORA_INICIO
    
      , V_DTHORA_TERMINO
    
      , V_TIPO
    
      , V_SE_DATA_ESTIMADA
    
      , V_SE_HORA_ESTIMADA
    
      , V_COD
    
      , N_COD
    
      , OPERACAO_EFETUADA
    
      , DTHORA_ATUALIZACAO
    
      , USUARIO_ATUALIZACAO
    
      , OSUSER
    
      , MAQUINA
    
      , USUARIO_ORACLE
    

    ) VALUES (

       :OLD.NUM_DIAS_PREVISTO
    
      , :OLD.DTHORA_INICIO
    
      , :OLD.DTHORA_TERMINO
    
      , :OLD.TIPO
    
      , :OLD.SE_DATA_ESTIMADA
    
      , :OLD.SE_HORA_ESTIMADA
    
      , :OLD.COD
    
      , :NEW.COD
    
      , V_ChangeType
    
      , SYSDATE
    
      , V_UsuarioAtualizacao
    
      , V_OSUSER
    
      , V_MAQUINA
    
      , USER
    

    );

    END;
    /

    ? Grato!