CREATE OR REPLACE TRIGGER XI.TRG_INSERT_ORGN
BEFORE INSERT 
ON XI.ORGN
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW 
beginif length(:new.orgn_id)=7 then
insert into cst@XJ_2_XIJ values(
:new.orgn_no,
substr(:new.orgn_id,1,5),
:new.orgn_id,
:new.dpt_nm,
null,
'1',
'01',
'A',
:new.dpt_nm,
null,
null,
'sys',
sysdate,
'sys',
sysdate,
null,null,null,null,null,null,null,null);
elsif length(:new.orgn_id)=5 then
if substr(:new.orgn_id,1,3)='001' then
insert into org@XJ_2_XIJ values(
:new.orgn_no,
:new.orgn_no,
'00',
:new.orgn_id,
:new.dpt_nm,
:new.dpt_nm,
null,
'A',
'20',
null,
null,
null,
null,
null,
null,
:new.orgn_id,
null,
null,
null,
'1',
null,
null,
null,
null,
null,
null,
'SYS',
sysdate,
'SYS',
sysdate);
insert into cstver@XJ_2_XIJ values(
:new.orgn_id,
:new.orgn_no,
'A',
'20',
:new.dpt_nm,
null,
'SYS',
sysdate,
null,
null,
:new.dpt_nm);
else 
insert into cst@XJ_2_XIJ values(
:new.orgn_no,
'000',
:new.orgn_id,
:new.dpt_nm,
null,
'1',
'01',
'A',
:new.dpt_nm,
null,
null,
'SYS',
sysdate,
'SYS',
sysdate,
null,null,null,null,null,null,null,null);
end if;
end if;
end;
/操作也不复杂,并发也没有,更谈不上死锁。两台服务器也是在局域网内,木有网络延迟。
但是就是数据更新很慢,十几分钟了都没结果。
囧啊~之前也做过插入更新删除的触发器,当时是很快的,而且也是整张表的数据全部读一遍。
求高人指导!!!万分感谢!!!

解决方案 »

  1.   

    有多少数据?批量操作带有dblink的触发器性能不好。
    如果需要在数据库之间同步数据,推荐使用物化视图。
    或者通过JOB+存储过程方式来处理。
      

  2.   

    操作之后有commit吗?
    触发器与引起该触发的操作为同一个事务。
    只有提交后,其它数据库才能看到相关数据。
      

  3.   


    意思是还要在触发器的后面加个 commit 么?我试试!!!
      

  4.   

    老兵的意思是你insert into  XI.ORGN 的时候有没有commit 
      

  5.   


    老大 触发器不能用commit的。
      

  6.   

    加个参数,自治事务处理
    PRAGMA AUTONOMOUS_TRANSACTION;
      

  7.   

      在插入表 XI.ORGN语句之后有没COMMIT