TGT_TABLE
- это физическая таблица, которая используется материализованным представлением в качестве «хранилища» SRC_TABLE
- это таблица, которая используется в качестве «источника» данных для этой материализованной представление - вы
- не можете изменить материализованное представление или базовую таблицу, которая используется в качестве его хранилища
- может изменить таблицу, которая используется в качестве источника, и это быть
SRC_TABLE
, а не TGT_TABLE
Это как бы сбивает с толку , потому что похоже, что у вас два объекта с одинаковым имя, которое невозможно . Например:
SQL> select object_name, object_type from user_objects where object_name = 'DEPT';
OBJECT_NAME OBJECT_TYPE
--------------- -------------------
DEPT TABLE
SQL> create materialized view dept as select * From dept;
create materialized view dept as select * From dept
*
ERROR at line 1:
ORA-00955: name is already used by an existing object
SQL>
Однако вы решили повторно использовать существующую таблицу (TGT_TABLE
; это предложение ON PREBUILT TABLE
), чтобы выглядело, как будто два объекта с одинаковым именем. Вот как создается материализованное представление - имеет «запрос» («представление», которое используется для рефракции sh данных) и «физическое хранилище» («таблица»), которое фактически содержит данные.
Если Вы не использовали таблицу, которая уже существует, и создали материализованное представление для некоторой таблицы, вы все равно увидите два объекта с одинаковым именем. Например:
SQL> select object_name, object_type from user_objects where object_name = 'TEST';
no rows selected
SQL> create materialized view test as select * from dept;
Materialized view created.
SQL> select object_name, object_type from user_objects where object_name = 'TEST';
OBJECT_NAME OBJECT_TYPE
--------------- -------------------
TEST TABLE
TEST MATERIALIZED VIEW
Видите? Что-то, что невозможно достичь иначе.
То, что вы делали, пыталось изменить таблицу storage , и это не сработало:
SQL> update test set loc = 'Zagreb' where deptno = 10;
update test set loc = 'Zagreb' where deptno = 10
*
ERROR at line 1:
ORA-01732: data manipulation operation not legal on this view
Но вы можете / должны изменить созданное материализованное представление таблицы:
SQL> update dept set loc = 'Zagreb' where deptno = 10;
1 row updated.
SQL>
В любом случае, изменение таблицы хранения не имеет особого смысла, так как эти изменения будут перезаписаны при следующем материализованном представлении. refre sh.
Итак, в вашем случае вы должны обновить / удалить SRC_TABLE
, а не TRG_TABLE
.