有两个表分别是 A用户下的 T_SRC_WEATHER_TSPG字段如图,
B用户下的t_src_weather 表,如图:
要求,当A用户下的T_SRC_WEATHER_TSPG表有插入或者更新数据时,同时将数据同步至B用户下的t_src_weather表中,
创建触发器,sql语句如下:
CREATE OR REPLACE TRIGGER weather_history_update -- weather_history_update为触发器名称
AFTER update or insert on Yjzhaccess.T_SRC_WEATHER_TSPG --AFTER 指定 触发时间,on后跟表名称,即当表Yjzhaccess.T_SRC_WEATHER_TSPG有更新或者插入时触发时间
for each row --每一行
begin
insert into yjzhhistory.t_src_weather (ID,SSXQMC,SSXQDM,HISTIME,WEATHER) --指定插入的表及字段
VALUES(:new.ID,:new.MC,:new.ID,:new.gxsj,:new.type); --将新插入的数据引入到该表中
end;
执行完后执行 INSERT INTO Yjzhaccess.T_SRC_WEATHER_TSPG values(23,'二十三大队',66.66,16.66,'雪',66,sysdate)出现异常,报ora-04098:触发器无效且未通过重新验证通过plsql developer进入该触发器发现编译错误:
发现错误为没有权限,登录dba用户将 B用户下的该表的插入权限赋给A用户 sql为:grant insert on yjzhhistory.t_src_weather to yjzhaccess
赋予权限后再执行测试更新语句,成功,此时触发器执行触发事件,两个表中都有了对应的数据
例子:create or replace trigger InsertAISyn
after update ON REQ_PROC
FOR EACH ROW
DECLARE
OLDSTATUS VARCHAR2(64);
NEWSTATUS VARCHAR2(64);
STUDYUID VARCHAR2(64);
STUDYID VARCHAR2(64);
PATIENTID VARCHAR2(64);
Modality VARCHAR2(64);
StudyDesc VARCHAR2(64);
BEGIN
NEWSTATUS :=:new.STATUS;
OLDSTATUS := :old.STATUS;
STUDYUID:=:new.STUDY_INS_UID;
Modality:=:new.MODALITY;
STUDYID:=:new.REQ_PROC_ID;
StudyDesc:=:new.PARTOFCHECK;
IF NEWSTATUS ='已检查' AND OLDSTATUS<>NEWSTATUS then
BEGIN
delete hhpacs.synaistaus where STUDYUID= STUDYUID;
if(Modality = 'CT') then
BEGIN
insert into hhpacs.SynAIStaus(STUDYUID,STUDYID,PATIENTID,Modality,StudyDesc,SynStatus)
values(STUDYUID,STUDYID,PATIENTID,Modality,StudyDesc,0);
END;
end if;
END;
end if;
END;