Могу ли я использовать оператор MERGE для использования предложений вставки, обновления и удаления в 2 или более таблицах с помощью одной операции? - PullRequest
0 голосов
/ 07 мая 2020

Я не могу найти эту информацию в документации, а также не могу найти информацию о возможности этой операции в других * inte rnet ресурсах.

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Нет, вы не можете использовать MERGE для изменения двух или более таблиц за одну операцию.

Синтаксис MERGE в документации имеет только один пузырь для таблицы или вид. Теоретически представление может состоять из нескольких таблиц, но MERGE не будет работать с таким представлением.

EDIT: Нет, MERGE в представлении, которое объединяет более одной таблицы, не работает :

CREATE TABLE t1 (id NUMBER PRIMARY KEY, c1 VARCHAR2(30));
CREATE TABLE t2 (id NUMBER PRIMARY KEY REFERENCES t1(id), c2 VARCHAR2(30));
CREATE TABLE m  (id NUMBER PRIMARY KEY);
CREATE VIEW  v12 AS SELECT t1.id, t1.c1, t2.c2 FROM t1 JOIN t2 ON t1.id=t2.id;
INSERT INTO  t1 VALUES(1, 'BEFORE');
INSERT INTO  t2 VALUES(1, 'before');
INSERT INTO  m  VALUES(1);

SELECT * FROM v12;
ID C1     C2
1  BEFORE before

`MERGE` causes an error:

MERGE INTO v12 USING m ON (v12.id = m.id)
 WHEN MATCHED THEN UPDATE set c1='AFTER';

ORA-38106: MERGE not supported on join view or view with INSTEAD OF trigger.
*Action:   When using MERGE to modify a view, you must only specify a single
           table in the view, and the view cannot have an INSTEAD OF trigger.

Однако UPDATE работает, но только если затронута одна базовая таблица:

UPDATE v12 SET c1='AFTER';
1 row updated.

UPDATE v12 SET c2='after';
1 row updated.

UPDATE v12 SET c1='AFTER', c2='after';
SQL Error: ORA-01776: cannot modify more than one base table through a join view
0 голосов
/ 07 мая 2020

Оператор MERGE может иметь только одну цель, и поэтому может только ВСТАВИТЬ или ОБНОВИТЬ одну таблицу. Его нельзя использовать для изменения более чем одной таблицы одновременно, если (как предлагает @ wolφi ниже) целью MERGE является представление с триггером INSTEAD OF, который затем изменяет несколько таблиц.

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