• 《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数据库中记录一张表的所有数据的增删改操作,并将它们插入到另一张表中以进行审计或日志记录。

  • 相关阅读:
    JavaString类中的常用方法
    【C++干货铺】初识模板
    ExcelPatternTool 开箱即用的Excel工具包现已发布!
    老卫带你学---leetcode刷题(139. 单词拆分)
    公益理发暖人心,爱心助老绿萝先行
    模板引擎——FreeMarker初体验
    1997-2020年各省三废排放量和熵值法计算的环境规制综合指数(无缺失值)
    【排序算法】归并排序(C语言)
    线程池的实现原理与使用详解
    【花书笔记|PyTorch版】手动学深度学习7:模型选择、欠拟合和过拟合
  • 原文地址:https://blog.csdn.net/liuhuanping/article/details/133912139