不要用行级触发器CREATE OR REPLACE TRIGGER TRG_APPTREEPRE_DELETE
After DELETE ON APPTREEPRE
BEGIN
  Update Predata X
     SET IsClassified = 0
   Where not exists (select 'x' 
                       from apptreepre
                      where AddressID = x.ADDRESSID);
END;

解决方案 »

  1.   

    可是这样太慢了,我的PreData表中有几十万条数据,用Exist Where更新一次要几十秒,有没有快一点的方法啊,谢谢
      

  2.   

    用包中的变量或者临时表都可以,用临时表效率应该更好一点
    create global temporary table tmpTable
     (AddressID varchar2(10))
     on commit delete rows
    /CREATE OR REPLACE TRIGGER TRG_APPTREEPRE_DELETE_For_Each_Row
    Before DELETE ON APPTREEPRE
    For Each Row
    BEGIN
      insert into tmpTable (AddressID)
      values (:old.AddressID);
    END;
    /CREATE OR REPLACE TRIGGER TRG_APPTREEPRE_DELETE
    After DELETE ON APPTREEPRE
    BEGIN
      Update Predata X
         SET IsClassified = 0
       Where AddressID in (Select AddressID from tmpTable)
         and not exists (select 'x' 
                           from apptreepre
                          where AddressID = x.ADDRESSID);
    END;
    /