CREATE OR REPLACE TRIGGER "EMP" AFTER
UPDATE ON "EMP" FOR EACH ROW 
BEGIN
IF (
:NEW.RQ<>:OLD.RQ OR
:NEW.name<>:OLD.name) THEN
UPDATE EMP_1
SET 
RQ=:NEW.RQ,
NAME=:NEW.name
WHERE DW=:OLD.DW ;
END IF;
END;
修改可以更新,但我把rq删掉,或添加新值emp1表的rq还是不变.求大侠,求原因

解决方案 »

  1.   

    判断部分没有考虑null情况
    IF (((:NEW.RQ is not null and :OLD.RQ is null)or(:NEW.RQ is null and :OLD.RQ is not null)or
    :NEW.RQ<>:OLD.RQ OR
    :NEW.name<>:OLD.name) THEN
    UPDATE EMP_1
    SET  
    RQ=:NEW.RQ,
    NAME=:NEW.name
    WHERE DW=:OLD.DW ;
    END IF;
      

  2.   

    IF (nvl(:NEW.RQ,'^')<>nvl(:OLD.RQ,'^') OR :NEW.name<>:OLD.name) THEN
    UPDATE EMP_1
    SET  
    RQ=:NEW.RQ,
    NAME=:NEW.name
    WHERE DW=:OLD.DW ;
    END IF;
    加nvl再判断
      

  3.   

    还是不行呀!在实际表中,有10多个字段,是不是他字段导致的了?if条件应该没问题 就是update更新不了
      

  4.   

    你的触发器名字和表名肿么是一样的,改下名字试试呢
    CREATE OR REPLACE TRIGGER tri_emp_u
       AFTER UPDATE
       ON emp
       FOR EACH ROW
    BEGIN
       IF (   NVL (:NEW.rq, '^') <> NVL (:OLD.rq, '^')
           OR NVL (:NEW.NAME, '^') <> NVL (:OLD.NAME, '^')
          )
       THEN
          UPDATE emp_1
             SET rq = :NEW.rq,
                 NAME = :NEW.NAME
           WHERE dw = :OLD.dw;
       END IF;
    END;
      

  5.   

    在pl/sql developer中调试一下不就知道了吗?
    看看到底程序的怎么走的,各个值是多少?
      

  6.   

    不会调试触发器 在google找也没找到。求资料 谢谢