Когда вы создаете представление по ссылке на базу данных, вы создаете объект в локальной базе данных. Это означает, что у вас есть словарная информация об удаленном объекте, локально.
Принимая во внимание, что синоним - это просто указатель на удаленный объект. Итак, все, что у вас есть, это определение синонима.
create database link loopback
using 'localhost/pdb1';
create table t (
c1 int
);
create or replace synonym s
for t@loopback;
create or replace view v as
select * from t@loopback;
select table_name, column_name, data_type
from user_tab_cols
where table_name in ( 'S', 'V' )
order by table_name, column_name ;
TABLE_NAME COLUMN_NAME DATA_TYPE
V C1 NUMBER
Таким образом, использование представления может быть удобно, если у вас есть инструменты, которые проверяют структуру таблицы (столбцы, типы данных и т. Д.).
С другой стороны, поскольку представление является локальным объектом, изменения в удаленной таблице не распространяются автоматически:
alter table t
add ( c2 date );
info s
TABLE: T
LAST ANALYZED:
ROWS :
SAMPLE SIZE :
INMEMORY :DISABLED
COMMENTS :
Columns
NAME DATA TYPE NULL DEFAULT COMMENTS
C1 NUMBER(38,0) Yes
C2 DATE Yes
info v
Columns
NAME DATA TYPE NULL DEFAULT COMMENTS
C1 NUMBER(38,0) Yes
Так что вам нужно заново создать представление, чтобы увидеть изменения. С другой стороны, это может быть преимуществом, если вы не хотите, чтобы удаленные изменения DDL немедленно появлялись в локальной базе данных.
Обратите внимание, что нет зависимости между локальным представлением и удаленной таблицей. Таким образом, прерывание изменений (например, удаление столбца) не делает представление недействительным. Вы узнаете об этом только тогда, когда сделаете запрос:
alter table t
drop ( c1 );
select status from user_objects
where object_name = 'V';
STATUS
VALID
select * from v;
ORA-00904: "C1": invalid identifier
select * from s;
no rows selected