• oracle Trigger


    --********************************************************************************************
    --功能说明:  (TR_BU_BILL_NOTICE_TASK_INFO),自动生成流水号、自动更新操作人和操作日期
    --调用函数:
    --修改记录: created by zhonglihai 2019.12.25
    --********************************************************************************************
    CREATE OR REPLACE TRIGGER BEPTRIG.TR_BU_BILL_WORK_FLOW_DETAIL_SET
       BEFORE UPDATE ON BEPDATA.BILL_WORK_FLOW_DETAIL_SET
       REFERENCING NEW AS NEW OLD AS OLD
       FOR EACH ROW
    DECLARE
       v_trigger_user VARCHAR2(50);
       v_trigger_date DATE;
       CURSOR c_switch(cp_switch beptrig.bep_tr_switch.switch_for%TYPE) IS
          SELECT status
            FROM beptrig.bep_tr_switch
           WHERE trigger_name = 'TR_BU_BILL_WORK_FLOW_DETAIL_SET'
             AND switch_for = cp_switch;
       v_status        beptrig.bep_tr_switch.status%TYPE;
       v_sqlcode       VARCHAR2(6);
       v_sqlerrm       VARCHAR2(200);
       v_error_comment VARCHAR2(300);
    BEGIN
       v_error_comment := 'before get_user';
       v_trigger_user  := pub_sys_package.get_user();
       v_trigger_date  := SYSDATE;
     
       v_error_comment := 'before BEP_SYNCH';
       OPEN c_switch('BEP_SYNCH');
       FETCH c_switch
          INTO v_status;
       IF c_switch%FOUND AND v_status = '1' THEN
          :new.updated_user := v_trigger_user;
          :new.updated_date := v_trigger_date;
       END IF;
       CLOSE c_switch;
     
       --出错处理
    EXCEPTION
       WHEN OTHERS THEN
          v_sqlcode := SQLCODE;
          v_sqlerrm := substr(SQLERRM, 1, 200);
          INSERT INTO beptrig.bep_tr_error_log
             (error_no,
              error_message,
              trigger_name,
              trigger_user,
              trigger_date,
              error_comment)
          VALUES
             (v_sqlcode,
              v_sqlerrm,
              'TR_BU_BILL_WORK_FLOW_DETAIL_SET',
              v_trigger_user,
              v_trigger_date,
              v_error_comment);
     
    END TR_BU_BILL_WORK_FLOW_DETAIL_SET;
    /
    

      

    1、For each row的意义是:在一次操作表的语句中,每操作成功一行就会触发一次;不写的话,表示是表级触发器,则无论操作多少行,都只触发一次;

    2、REFERENCING OLD 和 REFERENCING NEW 的含义不同,具体取决于触发器是行级还是语句级触发器。对于行级触发器,REFERENCING OLD 子句允许引用更新或删除之前行中的值,REFERENCING NEW子句允许引用已插入或更新的值。在 BEFORE 和 AFTER 触发器中可以引用 OLD 和 NEW 行。REFERENCING NEW 子句允许在插入或更新操作发生之前在 BEFORE 触发器中修改新行

    3、:NEW 和:OLD使用方法和意义,new 只出现在insertupdate时,old只出现在updatedelete时。在insertnew表示新插入的行数据,updatenew表示要替换的新数据、old表示要被更改的原来的数据行,deleteold表示要被删除的数据。
    begin前面出现的newold不加冒号,beginend之间出现的newold都要在前面加上":"。

    REFERENCING OLD AS OLD NEW AS NEW
    
    • 1

    这样写之后就可以在begin end直接直接使用别名来引用。

    --********************************************************************************************
    --功能说明:  (TR_BI_BILL_WORK_FLOW_DETAIL_SET),自动生产创建人创建日期更新操作人和操作日期
    --调用函数:
    --修改记录: created by zhonglihai 2019.12.25
    --********************************************************************************************
    CREATE OR REPLACE TRIGGER BEPTRIG.TR_BI_BILL_WORK_FLOW_DETAIL_SET
      BEFORE INSERT ON BEPDATA.BILL_WORK_FLOW_DETAIL_SET
      FOR EACH ROW
    DECLARE
      v_trigger_user VARCHAR2(100);
      v_trigger_date DATE;
    
      CURSOR c_switch(cp_switch bep_tr_switch.switch_for%TYPE) IS
        SELECT status
          FROM bep_tr_switch
         WHERE trigger_name = 'TR_BI_BILL_WORK_FLOW_DETAIL_SET'
           AND switch_for = cp_switch;
    
      v_status        bep_tr_switch.status%TYPE;
      v_sqlcode       VARCHAR2(6);
      v_sqlerrm       VARCHAR2(200);
      v_error_comment VARCHAR2(300);
    BEGIN
      v_error_comment := 'before get_user';
      v_trigger_user  := pub_sys_package.get_user();
      v_trigger_date  := SYSDATE;
    
      --需求来源:BEP数据同步
      v_error_comment := 'before BEP_SYNCH';
      --获取子功能控制信息
      OPEN c_switch('BEP_SYNCH');
      FETCH c_switch
        INTO v_status;
      IF c_switch%FOUND AND v_status = '1' THEN
        
        :new.created_user := v_trigger_user;
        :new.created_date := v_trigger_date;
        :new.updated_user := v_trigger_user;
        :new.updated_date := v_trigger_date;
      END IF;
    
      CLOSE c_switch;
      --出错处理
    EXCEPTION
      WHEN OTHERS THEN
        v_sqlcode := SQLCODE;
        v_sqlerrm := SUBSTR(SQLERRM, 1, 200);
      
        INSERT INTO bep_tr_error_log
          (error_no,
           --系统错误代码
           error_message,
           --系统错误信息
           trigger_name,
           --出错的trigger
           trigger_user,
           --出错的用户
           trigger_date,
           --出错的时间
           error_comment --出错详细信息
           )
        VALUES
          (v_sqlcode,
           v_sqlerrm,
           'TR_BI_BILL_WORK_FLOW_DETAIL_SET',
           v_trigger_user,
           v_trigger_date,
           v_error_comment);
    END TR_BI_BILL_WORK_FLOW_DETAIL_SET;
  • 相关阅读:
    sublime text添加snippet
    python __globals__, __file__
    Zen of Python
    Python的魔法函数之
    tornado session
    sqlalchemy学习
    自控力
    无需编译、快速生成 Vue 风格的文档网站
    python描述符理解
    python property理解
  • 原文地址:https://www.cnblogs.com/zhonglihai/p/12090121.html
Copyright © 2020-2023  润新知