有2张表wcmdocument, o_site,当表wcmdocument数据增、删、改时,通过触发器实时同步到表o_site.
触发器代码:
create or replace trigger rtest
after insert on wcmdocument
for each row
begin 
insert into o_site(DOCID,DOCCHANNEL,DOCTITLE,DOCAUTHOR,DOCRELTIME,DOCPUBURL)
values (:new.DOCID,:new.DOCCHANNEL,:new.DOCTITLE,:new.DOCAUTHOR,:new.DOCRELTIME,:new.DOCPUBURL);
end;
测试正常现在有个问题,只要同步wcmdocument满足特定条件的数据到o_site表,那些特定条件要根据另一张表组合查询得到,所以我建立了一个视图V_WCMDOCUMENT取满足条件的数据。然后把这些符合条件的数据同步到o_site表。可是不知道现在触发器该怎么写了?我写下面的
create or replace trigger rtest    on    V_WCMDOCUMENT  
INSTEAD  OF  INSERT  
  AS  
begin 
insert into o_site(DOCID,DOCCHANNEL,DOCTITLE,DOCAUTHOR,DOCRELTIME,DOCPUBURL)
values (:new.DOCID,:new.DOCCHANNEL,:new.DOCTITLE,:new.DOCAUTHOR,:new.DOCRELTIME,:new.DOCPUBURL);
end;结果wcmdocument新插入记录时,没有同步到o_site.
请大家帮忙,谢谢了。

解决方案 »

  1.   

    把view的定义语句改写——将select ....改成select count(*) into x,将from中的wcmdocument表去掉,将where中所有wcmdocument.FIELDNAME换成:NEW.FIELDNAME。把这个语句放到触发器中,并定义变量x为number类型,判断x的值,如果为0就不复制,否则复制。
      

  2.   

    "create or replace trigger rtest    on    V_WCMDOCUMENT  "
    你在视图上写触发器,晕啊,应该还是在表wcmdocument中写啊,原来的触发器后面加where条件过滤就行了