本文目录
ORACLE 触发器同步更新数据总是少最后一步的操作数据
建议用行级触发器,先在触发器外同步一次数据insert into rhh_c (select * from rhh minus select * from rhh_c);create or replace trigger tri AFTER insert or update or delete on rhh for each rowbegin if inserting then insert into rhh.c values (:new.spcode,:new.bz);end if;if deleting then--rhh删除后,rhh_c跟着删除,则delete rhh_c where spcode=:old.spcode and bz=:old.bz;--如果不删,这一段if可以不要,也就没必要定义上面的delete了end if;if updating then --这里不知道你将rhh的更新怎么反映到rhh_c上,如果两表完全同步则: update rhh_c set spcode=:new.spcode,bz=:new.bz where spcode=:old.spcode and bz=:old.bz;--如果将rhh的更新作为一条新记录反映到rhh_c则: insert into rhh.c values (:new.spcode,:new.bz);end if;end;/
在oracle触发器中怎么得到“当前”更新的行数据
create or replace trigger tr_t1_uafter update on t1---当修改了t1时触发for each rowbegin update t2 set col1 = :new.col1,col2=:new.col2,... where id = :old.id; -- id是关键列,不能修改;或者其他关联条件end;
ORACLE 触发器问同时更新2个表数据在线等
在一个表上定义的触发器里是不能再对这个表DML的,应该改成这样:create trigger STAFF_CHANGEPASS BEFORE INSERT OR UPDATE OF PASSWORD ON STAFFS FOR EACH ROWdeclare NEXT_KEY number;begin SELECT NVL(MAX(KEYID),0)+1 into NEXT_KEY FROM STAFF_HISTORYPASS; insert into STAFF_HISTORYPASS (KEYID,STAFF_ID,CHANGEDATE,password) values (NEXT_KEY ,:new.STAFF_ID,sysdate,:new.password); --改动位置在下面一行 :new.PASSCHANGEDATE:=sysdate;END STAFF_CHANGEPASS;
oracle 如何用触发器实现更新刚插入的数据
create or replace trigger tr_namebefore inserton 表for each rowbegin:new.某字段=’新值’;end;