Можем ли мы обновить запись в таблице и одновременно вставить обновленную запись в другую таблицу в Oracle DB 11g? - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу написать запрос, который проверит условие в таблице A и обновит все записи, соответствующие условию в таблице A, а затем возьмет только эти обновленные записи и вставит их как новые записи в таблицу B. Таблица A и Таблица B имеет одинаковую структуру. Я попытался сделать это с помощью оператора Merge, но он удовлетворяет только первой половине моего требования, то есть обновлению записей. Пожалуйста, помогите!

1 Ответ

0 голосов
/ 05 ноября 2018

Одним из вариантов этого может быть триггер базы данных - что-то очень похожее на аудит изменений, которые вы вносите в таблицу. Например (на основе схемы Скотта):

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 строк; триггер "скопирует" их в другую таблицу. Это не строго «один запрос», который вы упомянули в вопросе, но, надеюсь, он послужит цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...