在trigger中實現本表中修改插入的行

做一個表的insert的trigger,目的是隻修改插入行的字段。
 
CREATEORREPLACETRIGGER TR_RME_SLOT BEFORE
    INSERTONRME_SLOT
    FOREACHROW
BEGIN
 IF(:NEW.POSITION >=0AND:NEW.POSITION <10)THEN
      :NEW.SLOT_NAME :='0'||TO_CHAR(:NEW.POSITION);
 ELSE
      :NEW.SLOT_NAME := TO_CHAR(:NEW.POSITION);
 ENDIF;
END;
 
在插入以前就需要修改插入行;在trigger實現中並不需要用到update語句
 
同時,如果要在trigger中實現對本表記錄的修改,則需要這樣寫:
 
CREATEORREPLACETRIGGER TR_RME_SLOT AFTER
    INSERTONRME_SLOT
    FOREACHROW
DECLARE
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
 IF(:NEW.POSITION >=0AND:NEW.POSITION <10)THEN
      UPDATERME_SLOT SET SLOT_NAME ='0'||TO_CHAR(:NEW.POSITION)WHERE SLOT_ID=:NEW.SLOT_ID;
 ELSE
      UPDATERME_SLOT SET SLOT_NAME = TO_CHAR(:NEW.POSITION)WHERE SLOT_ID=:NEW.SLOT_ID;
 ENDIF;
 COMMIT;
END;
 
注意多了一段DECLARE,同時在trigger結束時需要COMMIT
本人經過一天的苦戰,修改後成功執行一觸發器:
create or replace trigger tri_ZSY_LEAVETABLE  
          before   insert     ON   "ZSY_LEAVETABLE"   FOR   EACH   ROW  
declare cctype number ; 
          begin
               select posi_type into cctype  from base_gov.a_frameuser
               where user_code=:new.personname;
               :new.persontype:=cctype;
                 
          end;
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章