oracle触发器 当表修改指定字段时,把那条记录插入到记录修改表中

本文介绍了一个数据库触发器的设计方案,该触发器用于监控客户信息表中的更改,并记录每次更新的具体字段及其新旧值。涉及的字段包括联系人电话、职位、地址等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

create or replace trigger "TR_SALE_MY_CUSTOMER_UPDATE"
  before update on sale_my_customer
  for each row


begin
  --客户联系人电话   
  if :old.CONTACT_PHONE <> :new.CONTACT_PHONE then
    insert into MY_CUSTOMER_MODIFY
      (id,
       My_Customer_Id,
       FIELD_NAME,
       FIELD_CODE,
       OLD_VALUE,
       NEW_VALUE,
       UPDATE_BY,
       UPDATE_DATE)
    values
      (MY_CUSTOMER_LOG.nextval,
       :old.id,
       '联系人电话',
       'contact_phone',
       :old.CONTACT_PHONE,
       :new.CONTACT_PHONE,
       :new.UPDATE_BY,
       sysdate);
    --DATA_MODIFY_LOG
  end if;
  --客户联系人职位
  if :old.CONTACT_POST <> :new.CONTACT_POST then
    insert into MY_CUSTOMER_MODIFY
      (id,
       My_Customer_Id,
       FIELD_NAME,
       FIELD_CODE,
       OLD_VALUE,
       NEW_VALUE,
       UPDATE_BY,
       UPDATE_DATE)
    values
      (MY_CUSTOMER_LOG.nextval,
       :old.id,
       '联系人职位',
       'CONTACT_POST',
       :old.CONTACT_POST,
       :new.CONTACT_POST,
       :new.UPDATE_BY,
       sysdate);
  end if;
  --客户公司地址
  if :old.CUSTOMER_ADRESS <> :new.CUSTOMER_ADRESS then
    insert into MY_CUSTOMER_MODIFY
      (id,
       My_Customer_Id,
       FIELD_NAME,
       FIELD_CODE,
       OLD_VALUE,
       NEW_VALUE,
       UPDATE_BY,
       UPDATE_DATE)
    values
      (MY_CUSTOMER_LOG.nextval,
       :old.id,
       '客户公司地址',
       'CUSTOMER_ADRESS',
       :old.CUSTOMER_ADRESS,
       :new.CUSTOMER_ADRESS,
       :new.UPDATE_BY,
       sysdate);
  end if;
  --客户邮箱
  if :old.EMAIL <> :new.EMAIL then
    insert into MY_CUSTOMER_MODIFY
      (id,
       My_Customer_Id,
       FIELD_NAME,
       FIELD_CODE,
       OLD_VALUE,
       NEW_VALUE,
       UPDATE_BY,
       UPDATE_DATE)
    values
      (MY_CUSTOMER_LOG.nextval,
       :old.id,
       '邮箱地址',
       'EMAIL',
       :old.EMAIL,
       :new.EMAIL,
       :new.UPDATE_BY,
       sysdate);
  end if;
  --客户类型
  if :old.CUSTOMER_TYPE <> :new.CUSTOMER_TYPE then
    insert into MY_CUSTOMER_MODIFY
      (id,
       My_Customer_Id,
       FIELD_NAME,
       FIELD_CODE,
       OLD_VALUE,
       NEW_VALUE,
       UPDATE_BY,
       UPDATE_DATE)
    values
      (MY_CUSTOMER_LOG.nextval,
       :old.id,
       '客户类型',
       'CUSTOMER_TYPE',
       :old.CUSTOMER_TYPE,
       :new.CUSTOMER_TYPE,
       :new.UPDATE_BY,
       sysdate);
  end if;
  --客户所属行业
  if :old.CUSTOMER_INDUSTRY <> :new.CUSTOMER_INDUSTRY then
    insert into MY_CUSTOMER_MODIFY
      (id,
       My_Customer_Id,
       FIELD_NAME,
       FIELD_CODE,
       OLD_VALUE,
       NEW_VALUE,
       UPDATE_BY,
       UPDATE_DATE)
    values
      (MY_CUSTOMER_LOG.nextval,
       :old.id,
       '客户所属行业',
       'CUSTOMER_INDUSTRY',
       :old.CUSTOMER_INDUSTRY,
       :new.CUSTOMER_INDUSTRY,
       :new.UPDATE_BY,
       sysdate);
  end if;
  --客户级别
  if :old.CUSTOMER_LEVEL <> :new.CUSTOMER_LEVEL then
    insert into MY_CUSTOMER_MODIFY
      (id,
       My_Customer_Id,
       FIELD_NAME,
       FIELD_CODE,
       OLD_VALUE,
       NEW_VALUE,
       UPDATE_BY,
       UPDATE_DATE)
    values
      (MY_CUSTOMER_LOG.nextval,
       :old.id,
       '客户所属级别',
       'CUSTOMER_LEVEL',
       :old.CUSTOMER_LEVEL,
       :new.CUSTOMER_LEVEL,
       :new.UPDATE_BY,
       sysdate);
  end if;
  --生日
  if :old.BIRTHDAY <> :new.BIRTHDAY then
    insert into MY_CUSTOMER_MODIFY
      (id,
       My_Customer_Id,
       FIELD_NAME,
       FIELD_CODE,
       OLD_VALUE,
       NEW_VALUE,
       UPDATE_BY,
       UPDATE_DATE)
    values
      (MY_CUSTOMER_LOG.nextval,
       :old.id,
       '生日',
       'BIRTHDAY',
       :old.BIRTHDAY,
       :new.BIRTHDAY,
       :new.UPDATE_BY,
       sysdate);
  end if;
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值