ORACLE 更新并返回 OLD 和 NEW 值

2024-06-28

PL/SQL (Oracle 12c) 中是否有与此 T-SQL 查询等效的内容?

UPDATE A SET A.columnA = 10 WHERE A.columnB < 30 OUTPUT INSERTED.*, DELETED.*

查询更新表A,同时返回更新前和更新后记录的状态。

对于我来说,触发器以及更新前的 SELECT 记录和更新后的 SELECT 记录都不是一个解决方案。


不是直接的,而是使用RETURNING INTO https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/returninginto_clause.htm你将能够达到同样的效果:

CREATE TABLE A(columnA VARCHAR2(10), columnB INT);
INSERT INTO A(columnA, columnB) VALUES ('Test', 10);
INSERT INTO A(columnA, columnB) VALUES ('Row 2', 20);
CREATE TABLE audit_table(col_new VARCHAR2(10),col_old VARCHAR2(10));

DECLARE
   TYPE rec IS RECORD (actual A.columnA%TYPE, old A.columnA%TYPE);
   TYPE col_a_t IS TABLE OF rec;
   v_a col_a_t;
BEGIN
  UPDATE (SELECT A.*, (SELECT A.columnA FROM dual) AS old_columnA FROM A)
  SET columnA = 'XYZ'
  WHERE columnB < 30
  RETURNING columnA, old_columnA BULK COLLECT INTO v_a;
  COMMIT;

  -- printing for debug
  FOR i IN v_a.first .. v_a.last LOOP
     dbms_output.put_line('Old =>' || v_a(i).old || ' new => ' || v_a(i).actual);
  END LOOP;

  -- additional
  FORALL i IN v_a.first .. v_a.last
    INSERT INTO audit_table VALUES v_a(i);
  COMMIT;
END;
/

SELECT * FROM A;
SELECT * FROM audit_table;

Idea taken from: Returning Old value during update http://www.orafaq.com/forum/t/177753/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORACLE 更新并返回 OLD 和 NEW 值 的相关文章

  • SQL 中WITH 子句的使用指南

    我了解如何使用WITH递归查询子句 但我在理解它的一般用途 功能时遇到问题 例如 以下查询更新一条记录 其 id 是通过使用按时间戳返回第一条记录 id 的子查询来确定的 update global prospect psp set sta
  • 如何在多个数据库的表之间移动数据,同时保持外键关系/引用完整性?

    我正在尝试找出将多个数据库中的几个数据表移动 合并到一个数据库中的最佳方法 我有一个类似于以下的架构 CREATE TABLE Products ProductID int IDENTITY 1 1 NOT NULL Name varcha
  • SQL Server 2005 将 VARCHAR 转换为 INT 但默认为无效类型

    我的表中有一个 varchar 100 列 其中包含整数 作为字符串 和非整数字符串的混合 例如 dimension varchar 100 5 17 3 Pyramids Western Bypass 15 我怎样才能写一个表达式 例如将
  • 恢复 woocommerce 订单

    最近 我的服务器团队更换了我的数据库 他们将我们以前的数据库放入其中 因此 我们丢失了某一天 特定日期 的订单详细信息 现在 服务器团队提供包含丢失当天订单详细信息的备份 现在请告诉我如何恢复这些订单 我无法用给定的备份替换我们的数据库 因
  • 为什么为 DATETIME 值定义加法运算符而不为 DATE 定义?

    我知道解决方法是使用DATEADD对于这两种数据类型 我想了解为什么语言设计者选择为一种数据类型而不是另一种数据类型定义此运算符 当您尝试直接在DATE DECLARE tomorrow DATE CONVERT DATE GETDATE
  • SQL仅选择列上具有最大值的行[重复]

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 这个问题在这里已经有答案了 我有这个文件表 这里是简化版本 id rev content 1 1 2 1 1 2 1 3 如何
  • Laravel 显示按年或月分组的记录详细信息

    我刚刚迁移到 Laravel 框架 并开始迁移一些遗留站点 但我遇到了 SQL 或 Blade 的问题 不知道是哪个 我必须显示大量的 运动类别 行 这些行按年份和月份分组 每个人都需要出勤等 我不确定继续走哪条路 我能够显示所有行并按日期
  • QSqlDatabasePrivate::removeDatabase:连接“myConnectionName”仍在使用中,所有查询将停止工作

    我有一个文件夹 里面有很多数据库 有时可能会删除或添加数据库到该文件夹 所以我使用 QTimer 并读取所有数据库 这是我的代码 this gt timer new QTimer this this gt timer gt setInter
  • 如何在 JPA/Hibernate 中执行本机 SQL 脚本?

    我有一个带有数据库转储的 SQL 脚本 我如何使用 Hibernate 执行它EntityManager 我这样尝试过 EntityManager manager getEntityManager Query q manager creat
  • MySQL 将 COMMENT 添加到外键

    我正在将旧数据库 SyBase 转换为 MySQL 并且有以下 DDL 查询 ALTER TABLE DBA tab prodotto ADD FOREIGN KEY fkey idlinea tpr idlin REFERENCES DB
  • 如何在 PLSQL 中格式化日期变量

    我是 PL SQL 新手 有这个问题 我创建了一个具有以下规范的过程 PROCEDURE runschedule i RunDate IN DATE this i RunDate有特定的格式 我需要将其更改为以下格式 MM dd yyyy
  • 如何优化查询以计算行相关的日期时间关系?

    假设我有一个简化的模型 其中patient可以有零个或多个events 一个事件有一个category and a date 我想支持以下问题 Find all patients that were given a medication a
  • 每笔交易后余额计算

    我有这样的表 cust id acc no trans id trans type amount 1111 1001 10 credit 2000 0 1111 1001 11 credit 1000 0 1111 1001 12 debi
  • 与 NULL 合并

    我在视图中发现了这段 SQL 片段 我对它的用途感到相当困惑 为简洁起见 实际的 SQL 被缩短了 SELECT COALESCE b Foo NULL AS Foo FROM a LEFT JOIN b ON b aId a Id 我想不
  • mysql:显示表-定义列名

    我正在用 LIKE 执行 mySQL SHOW TABLES 例如 show TABLES like address 返回以 address 开头的所有表 效果很好 返回的表名的列名是 Tables in username users ad
  • MySQL/SQL 检索文本字段的前 40 个字符?

    如何从 mysql 数据库表中检索文本字段 但不是整个文本 只是少数 40 个左右的字符 这可以在 sql 中完成还是需要使用 php 来完成 基本上我想做的是显示前 x 个字符 然后让用户单击它来查看完整内容 SELECT LEFT fi
  • 获取 PostgreSQL 中受 INSERT 或 UPDATE 影响的记录数

    我的 PostgreSQL 8 9 数据库驱动程序在执行时不返回受影响的记录计数INSERT or UPDATE PostgreSQL 提供非标准语法 回归 http www postgresql org docs current stat
  • 如何查找哪些视图正在使用 SQL Server (2008) 中的某个表?

    我必须向表中添加几列 并且还需要将这些列添加到使用该表的所有视图中 是否可以获取数据库中使用某个表的所有视图的列表 这应该可以做到 SELECT FROM INFORMATION SCHEMA VIEWS WHERE VIEW DEFINI
  • 如何将此查询编写为完整联接而不是联合左/右联接?

    这是代码 显示输入和所需的输出 基本上 我正在尝试自我加入 以将经纪人声明的结果与我的内部记录相匹配 所以左边的列是经纪人的列表 右边是我的列表 如果经纪人有仓位 而我没有 则右侧为 NULL 如果我有仓位而经纪商没有 则左侧为 NULL
  • Oracle Analytics - SQL 查询的分区和排序

    这是在回答另一个用户的问题时出现的question https stackoverflow com questions 261924 how do i compress this oracle resultset into values a

随机推荐

  • Matlab——处理对象

    有一个句柄类Foo classdef Foo lt handle properties SetAccess public GetAccess public x end methods function obj foo x construct
  • java轻量级调试器[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个轻量级的 java 调试器 无论是在 IDE 中还是独立的 命令行或 GUI 中 我正在使用 ant 和 vim 并且尝试过
  • 在导出之前将对象分配给变量作为模块默认警告

    import axios from axios const baseUrl http localhost 3001 persons const getAll gt return axios get baseUrl const create
  • C++ 模板专门化以提供额外的成员函数?

    如何以非内联方式为专用模板提供额外的成员函数 IE template
  • Eslint 错误:不要嵌套三元表达式

    我正在使用 React js 开发一个项目 并且使用 eslint 时出现此错误 不要嵌套三元表达式 这是我的代码 const MyApp gt return lt gt var1 var2
  • 是否可以加载没有图像名称的图像?

    是否可以加载没有图像名称的图像 像这样 img src http www example com 只使用 URL 的原因是因为 URL 上每次都会有其他图像 因此图像名称是动态的 是的 当然了 请记住 文件系统和 HTTP 请求 响应之间存
  • 在 Spark 中访问数组列

    Spark DataFrame 包含类型为 Array Double 的列 当我尝试将其返回到 map 函数时 它会抛出 ClassCastException 异常 以下 Scala 代码生成异常 case class Dummy x Ar
  • PowerShell:导入不带标题的 CSV 并删除部分重复行

    我有一个日志文件 其格式为 CSV 没有标题 第一列基本上是所记录问题的唯一标识符 对于同一问题标识符 可能有多行具有不同的详细信息 我想删除第一列重复的行 因为此时我不需要其他数据 目前我对 PowerShell 已经有了相当基本的了解
  • Spring @Before 更改每个用户登录名

    我有一个 Aspect 类 它执行 Before 方法并拦截用户登录时带有某些 Id 的所有查询 但问题是 每次用户登录时 所有登录用户的 Before 方法的 Id 都会发生变化 只需更改当前用户即可 简单的过程 当用户登录时 Aspec
  • 什么是德米特法则?

    让我们从维基百科开始 更正式地说 函数的德米特定律要求有一种方法m一个物体的O只能调用以下类型对象的方法 O itself m的参数 m 内创建 实例化的任何对象 O 的直接组件对象 全局变量 可通过 O 访问 范围为 m Rule 1 p
  • Angularjs ng-repeat 数组 - 重复值

    所以我刚刚开始使用 Angular JS 在处理数组时对 ng repeat 有点困惑 下面的代码不能按原样工作 但是当我将 dayNames 更改为对象并为其提供键值对时 就可以了 var myApp angular module exa
  • python itertools.permutations 的算法

    有人可以解释一下算法吗itertools permutationsPython 标准库 2 6 中的例程 我不明白为什么它有效 Code is def permutations iterable r None permutations AB
  • 如何在悬停时停止当前位置的CSS动画?

    我有一个 div 里面移动另一个 div 我需要停下来 block当我将鼠标悬停在当前位置时 container 怎么做 HTML div class container div class block div div CSS contai
  • 如何按条件删除列?

    假设df是一只熊猫DataFrame object 如何删除所有列df只包含None 空字符串或仅包含空格的字符串 删除的标准可以表示为所有值都产生的那些列True当输入以下测试函数时 lambda x x is None or not r
  • iOS 5 中的方法 Swizzling?

    Apple 在 iOS 5 中阻止了 Method Swizzling 吗 我做了一些尝试 发现带有 Method Swizzling 的应用程序可以在 iOS 4 上运行 但不能在 iOS 5 上运行 注意 该应用程序适用于 iOS 5
  • Wamp服务器启动错误“-无法启动[Ephase错误]”

    下载 WAMP 服务器后 会弹出一个窗口 显示 配置文件包含在线语法错误 1235 EParseError 参数 service 指定了未知服务 我不知道这个问题是什么类型 有人遇到过此类问题吗 我该如何解决此类问题 如果您要安装 WAMP
  • org.hibernate.QueryParameterException:无法找到命名参数[userId]

    我需要帮助 我遇到了上述异常 我哪里错了 在从类到表的映射中 我使用了以下内容 private String userId private String password 下面是我编写查询的类 public class LoginManag
  • java 中的预处理器日志记录语句

    例如我想在编译之前替换 debug enclosing method this is debug message for userName with if log isDebugEnabled log debug
  • 使用 python 添加注释到 jpeg 文件

    我想编写一个 python 程序 向 jpeg 文件添加注释 我读到 jpeg 文件中的注释由标记 0xfffe 表示 因此 我可以打开文件并在该标记后附加我想要的任何注释吗 我的代码看起来像这样 file open someimage j
  • ORACLE 更新并返回 OLD 和 NEW 值

    PL SQL Oracle 12c 中是否有与此 T SQL 查询等效的内容 UPDATE A SET A columnA 10 WHERE A columnB lt 30 OUTPUT INSERTED DELETED 查询更新表A 同时