做一個表的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;