Oracle觸發器(當A表新增/修改/刪除時,同步資料到B表)
阿新 • • 發佈:2020-12-15
一張班級表class有以下欄位
id、class_id、class_name
一張學生表student有以下欄位
id、student_name、class_id
班級表與學生表的關係是一對多
一個班級有若干個學生,若干個學生隸屬於一個班級
當班級表class中的class_id變更時,同步學生表student中的class_id
CREATE OR REPLACE TRIGGER TRIGGER_CHANGE_CLASS_ID AFTER INSERT OR UPDATE OR DELETE ON class -- 當class表無論是INSERT、UPDATE還是DELETE都會觸發 -- AFTER UPDATE OF CLASS_ID ON CLASS 也可以直接指定作用於CLASS表中的CLASS_ID欄位有變更時觸發,其他欄位變更不觸發 FOR EACH ROW -- 行級觸發 DECLARE -- local variables here區域性變數設定 V_INTRGRITY_ERROR EXCEPTION; V_ERROR_NO NUMBER(10); V_ERROR_MSG VARCHAR(200); BEGIN IF INSERTING THEN -- 當class表新增時,新增一條log記錄 INSERT INTO class_log(a,b,c) VALUES(:NEW.id,:NEW.class_id,:NEW.class_name); ELSIF UPDATING THEN -- 根據舊class_id作為條件,以新class_id替換之前的舊資料 UPDATE student SET class_id=:NEW.class_id WHERE class_id=:OLD.class_id; ELSE DELETE FROM student WHERE class_id=:OLD.class_id; END IF; EXCEPTION -- 異常捕獲處理 WHEN V_INTRGRITY_ERROR THEN RAISE_APPLICATION_ERROR(V_ERROR_NO, V_ERROR_MSG); END TRIGGER_CHANGE_CLASS_ID;