在oracle中用条件更新相同的表

时间:2014-08-26 17:13:53

标签: sql oracle plsql

无法执行触发器,任何人都可以解释我在哪里做错了。

CREATE OR REPLACE TRIGGER HK_WS_ED_CT_T1
    BEFORE INSERT OR UPDATE OF CI On HK_WS_ED_CT
     FOR EACH ROW
     BEGIN
      IF (:new.CI = CI) THEN 
       UPDATE HK_WS_ED_CT
      SET (TRANS_OTHER, TRANS_OTHER_DESC) =
     (SELECT TRANS_OTHER, TRANS_OTHER_DESC 
      FROM HK_WS_ED_CT
      where CI = :NEW.CI and rownum <=1 order by DATE)
      end if; 
    END;

1 个答案:

答案 0 :(得分:0)

您正在更新触发器所在的表。这是不允许的。 您应该将:new.trans_other等同于某个内容并将:new.trans_other_desc置于某事。

然后,该字段的更新即可。

如果你真的想要更新同一个表的所有行,你应该看一下复合触发器。但我怀疑这是你想要的。

数据库触发器的主要问题是您无法从触发器触发的表中选择,插入,更新,删除。此时此表已被锁定。