今天弄ORACLE觸發器一張表增刪改另一張表遇到了很多問題,百度一大堆全不是我想要的完美。
首先貼出我參考過覺得比較好的博文:
https://www.cnblogs.com/zjfjava/p/9155171.html 這篇博文主要覺得他說的 IF UPDATING(字段) THEN XXXXX END IF;很有用;
https://blog.csdn.net/bk_huangzongbo/article/details/78470341 這篇博文主要覺得他說的UPDATE先查詢定義一個是否有數據來控制做判斷很有用
------------------------ 而關於我這個的那篇博文找不到了...
下面我直接貼出我花了一兩個小時折騰出來的觸發器SQL:
CREATE OR REPLACE TRIGGER YT_STORAGE_URD AFTER INSERT OR UPDATE OR DELETE ON "HW"."SUBJECTINFO" FOR EACH ROW declare -- local variables here BEGIN IF INSERTING THEN INSERT INTO SC.SUBJECTINFO (SUBJECTID,MEETID,SUBJECTNAME,SUBJECTSHORTNAME,DISCUSSDATE,MORINGAFTERNOO,SORTNO,REMARK,OPERUSERID,OPERDATE,MODIFYUSERID,MODIFYDATE) VALUES(:NEW.ID,:NEW.MEETID,:NEW.SUBJECTNAME,:NEW.SUBJECTSHORTNAME,:NEW.DISCUSSDATE,:NEW.MORINGAFTERNOO,:NEW.SORTNO,'SCHY數據','1',NOW(),'1',NOW()); ELSIF DELETING THEN DELETE FROM SC.SUBJECTINFO WHERE SUBJECTID=:OLD.ID; ELSE UPDATE SC.SUBJECTINFO SET MEETID=:NEW.MEETID, SUBJECTNAME=:NEW.SUBJECTNAME, SUBJECTSHORTNAME=:NEW.SUBJECTSHORTNAME, DISCUSSDATE=:NEW.DISCUSSDATE, MORINGAFTERNOO=:NEW.MORINGAFTERNOO, SORTNO=:NEW.SORTNO, MODIFYDATE=:NEW.MODIFYDATE WHERE SUBJECTID=:OLD.ID; END IF; END YT_STORAGE_URD;
當大神看到小弟這個觸發器,可能會噴咋這麼菜,這麼簡單的觸發器竟然弄MD一兩個小時,O(∩_∩)O哈哈~
總結:
我想要的其實並不是這樣的,當想想如果A表更新的數據在B表沒有怎麼辦?再想想若A表更新的字段是否需要檢查這個字段是否更新纔去更新B表字段呢?再想想若A表刪除的數據沒得但是B表存在呢?A表刪除的數據B表沒有呢?觸發器會不會出現異常之內的?一系列問題都等待着去驗證...
原本這個觸發器是三個觸發器,是我看了IF ELSIF之後合併的。
大俠,來到此處請留下你美好的建議吧(#^.^#)