你的思路是没问题的,这和你的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;
举例
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;
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;
但是,我确实是用的是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;
就可以了,但是不知道前面的为啥不行,想多请教一下,上面两位大侠我一定会给分的,谢谢热心答复
((:NEW.NAME = :OLD.NAME) AND (:NEW.IDVALUE = :OLD.IDVALUE)) 判断中如果有一个为空,则返回值为假。
用:((NEW.NAME <> OLD.NAME) OR (NEW.IDVALUE <> OLD.IDVALUE)) 判断就对了。
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;
/