emmmm 寫這個博客心情很復雜,,,本來這個觸發器早就寫好了,后來發生點事就寫個博客當個備份吧,就當留紀念了;話不多數上問題以及SQL:
問題:
- 在ABONPB表上增加一個觸發器,針對車牌號字段做update操作且new:傳入的mduser字段為API,status為P時,向PA_BANK_REGNO_RECORD表中insert 一條記錄,sync字段為0,修改次數為之前的次數加1,其余字段參考字段意義。(YC)
- 當insert進ABONPB時新案件時,同理lla_code為MA 為條件也要觸發上班觸發器,計數加一(后來添加)
更新:提交一個閃回查詢找誤刪數據的SQL,類似的網上還有很多就不一一舉例了;;;;;
閃回查詢::
select * from dba_source a where a.type='TRIGGER'; SELECT * from dba_source a where a.name LIKE '%ABONPB_%'; SELECT NAME, TEXT FROM DBA_SOURCE AS OF TIMESTAMP TO_TIMESTAMP('2018-06-05 12:20:00', 'yyyy-mm-dd hh24:mi:ss') WHERE OWNER = 'ACSPRD' AND TYPE = 'PROCEDURE' AND NAME LIKE '%ABONPB_UPDATE%';
觸發器解決:
CREATE OR REPLACE TRIGGER ABONPB_UPDATE_20180615 BEFORE UPDATE OR INSERT ON ABONPB_20180615 FOR EACH ROW DECLARE IXEST INTEGER; CHAGE INTEGER; IXEST2 INTEGER; CHAGE2 INTEGER; BEGIN IF updating('regnr') AND :OLD.MDUSR = 'API' AND :OLD.STATUS = 'P'AND :old.Regnr != :new.Regnr THEN SELECT COUNT(1) INTO IXEST FROM EMAPIII.PA_BANK_REGNO_RECORD T WHERE T.IDCARD_NO = :OLD.POLICYNR AND T.CARD_NO = :OLD.VIN AND T.LASTNAME = :OLD.LASTNAME; IF IXEST = 0 THEN INSERT INTO EMAPIII.PA_BANK_REGNO_RECORD (ID, IDCARD_NO, CARD_NO, LASTNAME, REGNO, CHANGE_TIMES, CHANGE_TIME, CONTRACTCODE, SERIE, SYNC, ACCTNO) VALUES (EMAPIII.PA_BANK_REGNO_RECORD_SEQ.NEXTVAL, :NEW.VIN, :NEW.POLICYNR, :NEW.LASTNAME, :NEW.REGNR, 0, SYSDATE, :NEW.LCO_LNA_CODE, :NEW.SERIE, 0, :NEW.SUBNUMBER); ELSE SELECT T.CHANGE_TIMES INTO CHAGE FROM EMAPIII.PA_BANK_REGNO_RECORD T WHERE T.IDCARD_NO = :OLD.POLICYNR AND T.CARD_NO = :OLD.VIN AND T.LASTNAME = :OLD.LASTNAME; UPDATE EMAPIII.PA_BANK_REGNO_RECORD SET REGNO =:new.Regnr, CHANGE_TIMES = CHAGE+1 , CHANGE_TIME = SYSDATE WHERE IDCARD_NO = :OLD.POLICYNR AND CARD_NO = :OLD.VIN AND LASTNAME = :OLD.LASTNAME; END IF; END IF; IF :new.Lla_Code='MA'THEN SELECT COUNT(1) INTO IXEST2 FROM EMAPIII.PA_BANK_REGNO_RECORD T WHERE T.IDCARD_NO = :new.POLICYNR AND T.CARD_NO = :new.VIN AND T.LASTNAME = :new.LASTNAME; IF IXEST2 = 0 THEN INSERT INTO EMAPIII.PA_BANK_REGNO_RECORD (ID, IDCARD_NO, CARD_NO, LASTNAME, REGNO, CHANGE_TIMES, CHANGE_TIME, CONTRACTCODE, SERIE, SYNC, ACCTNO) VALUES (EMAPIII.PA_BANK_REGNO_RECORD_SEQ.NEXTVAL, :NEW.VIN, :NEW.POLICYNR, :NEW.LASTNAME, :NEW.REGNR, 0, SYSDATE, :NEW.LCO_LNA_CODE, :NEW.SERIE, 0, :NEW.SUBNUMBER); ELSE SELECT T.CHANGE_TIMES INTO CHAGE2 FROM EMAPIII.PA_BANK_REGNO_RECORD T WHERE T.IDCARD_NO = :new.POLICYNR AND T.CARD_NO = :new.VIN AND T.LASTNAME = :new.LASTNAME; UPDATE EMAPIII.PA_BANK_REGNO_RECORD SET REGNO =:new.Regnr, CHANGE_TIMES = CHAGE2+1 , CHANGE_TIME = SYSDATE WHERE IDCARD_NO = :new.POLICYNR AND CARD_NO = :new.VIN AND LASTNAME = :new.LASTNAME; END IF; END IF; END;
ps:最后的最后一定要注意!!!!!!刪除表時一定要備份該表的觸發器、索引等,,,,,說多了都是淚啊!!!!!再然后,誤刪了沒備份可以試試Oracle的閃回查詢,運氣好的話可以找回,,,
以上!!!