Нет, вы не можете использовать 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