【问题标题】:How to handle exception within trigger如何处理触发器中的异常
【发布时间】:2019-01-10 08:03:52
【问题描述】:

我想在触发器中添加异常处理。

我创建了如下触发器。

我想在其中添加异常处理。这样如果有任何无效条件,我的触发器就不会失败。

CREATE OR REPLACE TRIGGER system_notification_audit
 AFTER 
      INSERT OR 
      UPDATE 
on system_notification
FOR EACH ROW
    begin
insert into system_notification_log 
select :NEW.ID , :NEW.NAME, :NEW.Description, :NEW.PREFERENCE, :NEW.FREQUENCY, 
       :NEW.IS_HIGH, :NEW.IS_REQUIRED, :NEW.UPDATED_BY, :NEW.UPDATED_DATE
  from dual
 where :OLD.PREFERENCE <> :NEW.PREFERENCE 
 OR :OLD.FREQUENCY <> :NEW.FREQUENCY OR :NEW.IS_HIGH <> :OLD.IS_HIGH OR :NEW.IS_REQUIRED <> :OLD.IS_REQUIRED;
END;

【问题讨论】:

标签: oracle plsql exception-handling database-trigger


【解决方案1】:

简单地忽略异常并不总是设计程序的好方法。至少在某处记录错误以供以后观察。

请注意,您的INSERT 语句可以使用简单的insert(不带select)和IF 条件重写。

CREATE OR REPLACE TRIGGER system_notification_audit AFTER
     INSERT OR UPDATE ON system_notification
     FOR EACH ROW
BEGIN
     IF
          :old.preference    <>:new.preference OR :old.frequency <>:new.frequency 
             OR :new.is_high <>:old.is_high OR :new.is_required  <>:old.is_required
     THEN
          INSERT INTO system_notification_log (
               id,
               name,
               description,
               preference,
               frequency,
               is_high,
               is_required,
               updated_by,
               updated_date
          ) VALUES (
               :new.id,
               :new.name,
               :new.description,
               :new.preference,
               :new.frequency,
               :new.is_high,
               :new.is_required,
               :new.updated_by,
               :new.updated_date
          );
     END IF;

 EXCEPTION WHEN OTHERS THEN
  pr_trigger_logs(trig_name => 'system_notification_audit',
                    err_msg => DBMS_UTILITY.FORMAT_ERROR_BACKTRACE()); 
    -- calling an error logging procedure.
END;
/

我不会给你过程pr_trigger_logs的定义。作为练习,我会让你想出它!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多