该触发器提议跟踪客户表上的旧值和新值。 它只为每个更改的值列插入一个新行。 想象一下,有二十五列,我得写25次相同的东西。 有没有什么办法可以做到这一点在循环或更好的方式来保持更通用。想象一下,如果有任何新的客户添加到客户表中,用您告诉我的方式将不需要更改触发器。遍历oracle表中的列
CREATE OR REPLACE TRIGGER KRD_CUSTOMER_UPD_DEL_TRG
BEFORE UPDATE OR DELETE ON KRD_CUSTOMER
FOR EACH ROW
DECLARE
V_ISLEMTIPI VARCHAR2(1);
BEGIN
IF UPDATING THEN
if :OLD.CUSTOMERNAME <> :NEW.CUSTOMERNAME then
krd_ins_customerTable(p_OldCustomerName => :OLD.CUSTOMERNAME,
p_NewCustomerName => :NEW.CUSTOMERNAME);
end if;
end if;
end;
FWIW,你可能想明确地在你的触发器中处理'CUSTOMERNAME'的NULL值。 – Ollie
最实用的方法是动态创建静态触发器。 (这是使用SQL来生成触发器。)blgnkc提供了Tom Kyte解决方案的链接,作为对Rene答案的评论。 http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:59412348055 – spencer7593