Допустим, у вас есть таблица:
SQL> conn alek/alek@test
Connected.
SQL> create table alek.alek_table(n number);
Table created.
И вы создаете для нее PUBLIC SYNONYM
, чтобы к ней можно было получить доступ с другим именем, без необходимости писать схему при любом входе в систему. пользователь (с необходимыми разрешениями):
SQL> create public synonym a_tab for alek_table;
Synonym created.
Вы можете использовать синоним для доступа к таблице
SQL> select * from a_tab;
no rows selected
Вы можете даже использовать простое имя таблицы, если вы войдете в систему с владельцемпользователь:
SQL> select * from alek_table;
no rows selected
Вы всегда можете использовать схему schema.table:
SQL> select * from alek.alek_table;
no rows selected
Но вы не можете использовать схему schema.synonym:
SQL> select * from alek.a_tab;
select * from alek.a_tab
*
ERROR at line 1:
ORA-00942: table or view does not exist
, потому чтоВы создали синоним public
, и он не считается объектом схемы, а public
.
Иными словами, если вы создаете частный синоним, у вас есть объект схемы и вы можете использовать схему. синоним для доступа к таблице:
SQL> create synonym a_tab_private for alek_table;
Synonym created.
SQL> select * from alek.a_tab_private;
no rows selected