xiaotuziyibalang 2024-05-05 00:14 采纳率: 50%
浏览 2
已结题

Oracle触发器记录修改前后的字段值

img

以上两个表,表A是业务表,表B是日志表。
要求用Oracle触发器实现当用户修改了标签价时,将品类、修改前、修改后写入到表B的品类、修改前、修改后字段中,并记录修改时间。

  • 写回答

7条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-05 00:14
    关注

    引自免费微信小程序:皆我百晓生

    为了实现您的需求,我们需要创建一个Oracle触发器,该触发器在表A(业务表)上的标签价字段被更新时触发,然后将修改前后的标签价以及修改时间记录到表B(日志表)中。以下是详细的步骤和触发器代码示例:

    表结构假设

    • 表A (业务表): 假设表名为PRODUCTS

      • ID (主键)
      • CATEGORY (品类)
      • PRICE (标签价)
    • 表B (日志表): 假设表名为PRICE_CHANGE_LOG

      • ID (自增序列主键)
      • PRODUCT_ID (与表A的ID关联)
      • OLD_PRICE (修改前价格)
      • NEW_PRICE (修改后价格)
      • MODIFICATION_TIME (修改时间)

    创建触发器

    创建一个DML触发器(After Update类型),在PRODUCTS表的PRICE字段更新后记录变化信息到PRICE_CHANGE_LOG表。

    CREATE OR REPLACE TRIGGER trg_log_price_changes
    AFTER UPDATE OF PRICE ON PRODUCTS
    FOR EACH ROW
    BEGIN
       -- 检查是否真的有价格变化,避免无意义的日志记录
       IF :NEW.PRICE != :OLD.PRICE THEN
          INSERT INTO PRICE_CHANGE_LOG (
             PRODUCT_ID,
             OLD_PRICE,
             NEW_PRICE,
             MODIFICATION_TIME
          )
          VALUES (
             :OLD.ID,          -- 修改前的ID
             :OLD.PRICE,       -- 修改前的价格
             :NEW.PRICE,       -- 修改后的价格
             SYSDATE           -- 当前系统时间作为修改时间
          );
       END IF;
    END;
    /
    

    解释

    1. TRIGGER: 定义触发器名为trg_log_price_changes
    2. AFTER UPDATE OF PRICE ON PRODUCTS: 指定在PRODUCTS表的PRICE字段更新之后触发。
    3. FOR EACH ROW: 表示对于每一行更新操作都会执行触发器中的代码。
    4. IF条件: 确保只有当价格确实发生变化时才记录日志,避免无变动时产生冗余日志。
    5. INSERT INTO: 将变化的数据插入到PRICE_CHANGE_LOG表中。
    6. :OLD 和 :NEW: 这些是Oracle中的伪列,分别代表更新前的行值(:OLD)和更新后的行值(:NEW)。
    7. SYSDATE: 获取当前系统时间,用于记录修改时间。

    注意事项

    • 确保在执行上述脚本之前,PRICE_CHANGE_LOG表已经存在且具有正确的结构。
    • 如果IDPRODUCTS表中不是唯一的,可能需要调整逻辑以正确记录PRODUCT_ID
    • 在生产环境中部署前,建议先在测试环境中验证触发器的功能。

    通过这个触发器,每当表A中的标签价发生更改时,相关的信息就会自动记录到表B中,满足您的需求。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月5日
  • 修改了问题 5月5日
  • 创建了问题 5月5日

悬赏问题

  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊