【问题标题】:Capture log information and raise exception in Oracle Trigger在 Oracle 触发器中捕获日志信息并引发异常
【发布时间】:2015-10-15 18:32:56
【问题描述】:

我有一个要求,列的状态从 x 变为 y。 我想捕获哪个进程将日志表中的值从 x 更改为 y 并引发异常以使用 Oracle BEFORE UPDATE 触发器回滚更新

这是否可以使用 pragma automatic_transaction ?

请帮忙。

【问题讨论】:

    标签: sql oracle11g triggers datatrigger


    【解决方案1】:

    这是可能的。我假设您知道如何识别我猜想来自v$session 中的某个列或用户定义的上下文或类似来源的“更改值的过程”。

    你通常会定义一个过程

    CREATE OR REPLACE PROCEDURE log_error( <<parameters>> )
    AS
      PRAGMA autonomous_transaction;
    BEGIN
      insert into log_table ...
    
      commit;
    END;
    

    然后从引发异常的触发器调用该过程

    CREATE OR REPLACE TRIGGER trg_no_x_to_y
      BEFORE UPDATE ON table_name
      FOR EACH ROW
    BEGIN
      IF( :old.column = x and :new.column = y )
      THEN
        log_error;
        raise_application_error( -20001, 'Cannot change column from x to y' );
      END IF;
    END;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多