我们是否可以更新表中的记录,并同时将更新的记录插入Oracle DB 11g中的另一个表中

时间:2018-11-05 05:53:50

标签: sql oracle oracle11g

我想编写一个查询,该查询将检查表A中的条件并更新与表A中的条件匹配的所有记录,然后仅获取这些更新的记录并将它们作为新记录插入表B中。表B都具有相同的结构。 我尝试使用Merge语句执行此操作,但它仅满足我的要求的前一半,即更新记录。 请帮忙!

1 个答案:

答案 0 :(得分:1)

执行此操作的一个选项可能是数据库触发器-与对表所做的审核更改非常相似。例如(基于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行;触发器会将它们“复制”到另一个表中。严格地说,这并不是您在一个问题中提到的“一个查询”,但希望能达到目的。