大家有没有遇到复合触发器这种BUG
山林73 2020-05-06 05:53:08 在 BEFORE EACH ROW 中,UPDATE 语句 SET 字段对应的 :new 值为空,
AFTER EACH ROW 中则可以取到 :new 的值。
如:
CREATE OR REPLACE TRIGGER tr_table1_ct
FOR INSERT OR UPDATE OR DELETE ON table1
COMPOUND TRIGGER
BEFORE STATEMENT IS BEGIN END BEFORE STATEMENT;*/
BEFORE EACH ROW IS BEGIN
dbms_output.put_line('BEFORE EACH ROW '
||'/col1:'||:old.col1
||'/col1:'||:new.col1
);
END BEFORE EACH ROW ;
AFTER EACH ROW IS BEGIN
dbms_output.put_line('AFTER EACH ROW'
||'/col1:'||:old.col1
||'/col1:'||:new.col1
);
END AFTER EACH ROW ;
END tr_table1_ct;
UPDATE table1
SET col1 = 'test'
WHERE id = 123
;--这时 BEFORE EACH ROW 中 :new.col1 为空
--如果 UPDATE 不用 col1
UPDATE table1
SET col2 = '222'
WHERE id = 123
;--这时 BEFORE EACH ROW 中 :new.col1 不为空