1. 程式人生 > 其它 >Oracle觸發器(當A表新增/修改/刪除時,同步資料到B表)

Oracle觸發器(當A表新增/修改/刪除時,同步資料到B表)

技術標籤:oracle觸發器oracle

一張班級表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;