• 《Oracle系列》Oracle 通过触发器记录一张表所有数据的增删改操作,然后插入到另外一张表中


    要通过触发器在Oracle数据库中记录一张表的所有数据的增删改操作,并将这些操作插入到另一张表中,可以使用以下步骤:

    1. 创建记录操作的目标表
      首先,创建一个目标表,用于存储所有的增删改操作。这个表应该包含足够的列来记录操作类型、操作的时间戳、原始表中受影响的行的主键等信息。

      CREATE TABLE audit_table (
          operation_type VARCHAR2(10),
          operation_time TIMESTAMP,
          primary_key_column NUMBER,  -- 原始表中的主键列
          other_columns VARCHAR2(255)  -- 如果需要记录其他信息
      );
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    2. 创建一个触发器
      创建一个触发器,它会在原始表的增删改操作发生时自动触发,并将操作的详细信息插入到记录表中。

      CREATE OR REPLACE TRIGGER audit_trigger
      AFTER INSERT OR UPDATE OR DELETE ON original_table
      FOR EACH ROW
      BEGIN
          IF INSERTING THEN
              INSERT INTO audit_table (operation_type, operation_time, primary_key_column, other_columns)
              VALUES ('INSERT', SYSTIMESTAMP, :new.primary_key, :new.other_column);
          ELSIF UPDATING THEN
              INSERT INTO audit_table (operation_type, operation_time, primary_key_column, other_columns)
              VALUES ('UPDATE', SYSTIMESTAMP, :new.primary_key, :new.other_column);
          ELSIF DELETING THEN
              INSERT INTO audit_table (operation_type, operation_time, primary_key_column, other_columns)
              VALUES ('DELETE', SYSTIMESTAMP, :old.primary_key, :old.other_column);
          END IF;
      END;
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15

      请将上述代码中的original_table替换为要跟踪操作的原始表的名称,并根据需要调整列名和列数据类型。

    3. 测试触发器
      插入、更新或删除原始表中的数据时,触发器将会记录这些操作并将它们插入到audit_table中。你可以执行这些操作并检查audit_table以确保触发器正常工作。

      -- 示例:插入一行数据到原始表
      INSERT INTO original_table (primary_key, other_column) VALUES (1, 'Some data');
      
      -- 示例:更新原始表中的一行数据
      UPDATE original_table SET other_column = 'Updated data' WHERE primary_key = 1;
      
      -- 示例:从原始表中删除一行数据
      DELETE FROM original_table WHERE primary_key = 1;
      
      -- 查看 audit_table 中的记录
      SELECT * FROM audit_table;
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

      这样,你就可以使用触发器在Oracle数据库中记录一张表的所有数据的增删改操作,并将它们插入到另一张表中以进行审计或日志记录。

  • 相关阅读:
    使用Maven创建父子工程
    关于错误javax.net.ssl.SSLException: Received close_notify during handshake
    Python类的多种方法,你分得清吗?
    算法总结--ST表
    Python机器学习016:pytorch张量与数据类型
    云IDE开发环境和使用体验
    Flutter真机运行及模拟器运行
    SpringBoot 22 Swagger配置扫描接口和开关、过滤url、根据环境决定使用
    【JavaScript 18】属性描述对象 获取 自身全部属性名 定义or修改属性 判断可遍历性 元属性 存取器
    ssm框架之spring:xml如何配置创建对象
  • 原文地址:https://blog.csdn.net/liuhuanping/article/details/133912139