你的思路是没问题的,这和你的trigger的建立脚本有关,你应用after和for eacho row选项
举例
CREATE TRIGGER trigger_eg
AFTER
UPDATE OF name,id_value ON T_TABLE
FOR EACH ROW
BEGIN
  IF ((:NEW.NAME = :OLD.NAME) AND (:NEW.IDVALUE = :OLD.IDVALUE)) THEN
   RETURN ;END IF;....END;

解决方案 »

  1.   

    CREATE TRIGGER trigger_eg
    AFTER
    UPDATE OF name,id_value ON T_TABLE
    FOR EACH ROW
    BEGIN  IF ((:NEW.NAME = :OLD.NAME) AND (:NEW.IDVALUE = :OLD.IDVALUE)) THEN
       raise_application_errors(-2003,'没有更改数据');
       return ;END IF;....END;
      

  2.   

    谢谢老狼和大森林。
    但是,我确实是用的是AFTER 和 FOR EACH ROW,只不过,我不想加上OF的字段限制。
    后来我改为
    CREATE TRIGGER trigger_eg
    AFTER
    UPDATE ON T_TABLE
    FOR EACH ROW
    WHEN ((NEW.NAME <> OLD.NAME) OR (NEW.IDVALUE <> OLD.IDVALUE)) BEGIN
    ....
    END IF;
    就可以了,但是不知道前面的为啥不行,想多请教一下,上面两位大侠我一定会给分的,谢谢热心答复
      

  3.   

    空值闹的。
    ((:NEW.NAME = :OLD.NAME) AND (:NEW.IDVALUE = :OLD.IDVALUE)) 判断中如果有一个为空,则返回值为假。
    用:((NEW.NAME <> OLD.NAME) OR (NEW.IDVALUE <> OLD.IDVALUE)) 判断就对了。
      

  4.   

    其实作用是等同的。
    CREATE TRIGGER trigger_eg
    AFTER
    UPDATE ON T_TABLE
    FOR EACH ROW
    begin
    IF (:NEW.NAME<>:OLD.NAME) or (:NEW.IDVALUE <>:OLD.IDVALUE) THEN
      ...END IF;
    end;
    /