sql - 我们可以在 Oracle DB 11g 中更新表中的记录并同时将更新的记录插入到另一个表中吗
问题描述
我想编写一个查询来检查表 A 中的条件并更新与表 A 中的条件匹配的所有记录,然后仅获取这些更新的记录并将它们作为新记录插入表 B 中。表 A 和表 B 都具有相同的结构。我尝试使用 Merge 语句执行此操作,但它只满足我的前半部分要求,即更新记录。请帮忙 !
解决方案
这样做的一个选项可能是数据库触发器 - 非常类似于审核您对表所做的更改。例如(基于 Scott 的模式):
SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';
Session altered.
SQL> create table dept_audit as select * from dept where 1 = 2;
Table created.
SQL> alter table dept_audit add datum date;
Table altered.
SQL> create or replace trigger trg_bu_dept
2 after update on dept
3 for each row
4 begin
5 insert into dept_audit (deptno, dname, loc, datum)
6 values (:new.deptno, :new.dname, :new.loc, sysdate);
7 end;
8 /
Trigger created.
SQL> update dept set loc = 'Dallas' where deptno = 20;
1 row updated.
SQL> select * from dept_audit;
DEPTNO DNAME LOC DATUM
---------- -------------- ------------- -------------------
20 RESEARCH Dallas 05.11.2018 08:19:06
SQL>
所以,你只UPDATE
需要你想要的行;触发器会将它们“复制”到另一个表中。这并不是您在问题中提到的严格意义上的“一个查询”,但是 - 希望 - 能够达到目的。
推荐阅读
- sql - 通过 SQL 在 noSQL 类型文档上从父属性名称创建新属性
- ios - 如何在 Xcode (Swift) 中编码 UI 对象?
- c++ - 将字节向量转换为浮点向量
- android - 重复的 jar 条目
- swift - SQLite.swift:由于无法识别的令牌而无法检索表计数:“:”
- xamarin.forms - 如何更改 Xamarin Forms Shell 中的弹出背景颜色?
- python - 我在 Tkinter 中嵌入了一个 pygame 窗口,如何操作 pygame 窗口?
- r - 导出的数据框是 Excel 文件中的文本而不是数字
- javascript - 使用 javascript 动态编辑多个相同的 HTML 表单
- react-native - 为什么 AsyncStorage 会在 react native 中返回“null”?