码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 《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数据库中记录一张表的所有数据的增删改操作,并将它们插入到另一张表中以进行审计或日志记录。

  • 相关阅读:
    设计模式--职责链模式(Chain of Responsibility Pattern)
    GB28181,sdk,设备集成和平台测试
    中集集团全球港航人工智能高科技独角兽中集飞瞳贯彻国家智慧港口战略,全球最先进港航AI核心技术和工业级产品超一流智慧港口解决方案
    IT运维:使用数据分析平台监控奇安信
    chrome控制台怎么看hover的样式
    关于IDEA工具的一些简单的设置以及快捷键
    深度学习理论知识入门【EM算法、VAE算法、GAN算法】和【RBM算法、MCMC算法、HMC算法】
    11.17 - 每日一题 - 408
    基于Expression Lambda表达式树的通用复杂动态查询构建器——《构思篇二》已开源
    mTLS: openssl创建CA证书
  • 原文地址:https://blog.csdn.net/liuhuanping/article/details/133912139
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号