Синонимы
Синоним – это альтернативное имя объекта. Если создан синоним для объекта, то все SQL команды к объекту могут выполняться используя настоящее имя или синоним. Это может показаться очень простым, но это не так. Использование синонимов позволяет приложениям работать для любого пользователя, вне зависимости от схемы в которой лежат таблицы и представления и даже БД. Рассмотрим запрос
select * from hr.employees@prod;
Пользователь выполняющий такой запрос должен знать что таблица employees принадлежит схеме HR в БД определяемой сслыкой PROD. Если общий синоним был созда таким запросом
create public synonym emp for hr.employees@prod;
то все пользователи (все!) могут использовать запрос вида
select * from emp;
Это предоставляет независимость данных и абстракцию местонахождения. Таблицы и представления могут быть переименованы или перемещены без необходимости изменения кода; необходимо только поправить синоним.
Так же как и команды SELECT, DML команды могут обращаться к синонимам так же как к объектам на которые они ссылаются.
Приватные синонимы (private synonyms) – это объекты схемы. Они могут быть или в текущей схеме, или использоваться вместе с именем схемы. Общие (public) синонимы существуют независимо от схемы. Общие синонимы могут использоваться любым пользователем кому назначены соответсвующие права без использования имени схемы. Приватные синонимы должны иметь уникальное имя в схеме. Общие синонимы могут иметь такое же имя как и иям объекта схемы. Когда выполняется запрос без указания схемы, Oracle вначале проверяет есть ли объект с таким именем в текущей схеме, и только если он не найдет Oracle попробует найти общий синоним с таким именем. То есть если в предыдущем примере у пользователя есть таблица EMP – это будет то что отобразится пользователю – не таблица назначенная общему синониму.
Синтаксис создания синонима
CREATE [PUBLIC] SYNONYM synonym FOR object ;
Пользователю должны быть назначены права для создания синонимов (приватных) и дополнительные права для создания общих синонимов. Обычно только администратор БД может создавать и удалять общие синонимы. Это правильно потому что их создание (или удаление) влияет на всех пользователей.
EXAM TIP The “public” in “public synonym” means that it is not a schema object and cannot therefore be prefixed with a schema name. It does not mean that everyone has permissions against it.
Для удаления синонима используется команда
DROP [PUBLIC] SYNONYM synonym ;
Если объект на который ссылается синоним (таблица или представление) удалён, синоним не удаляется. Любое обращение к синониму вернёт ошибку. В этом отношении синоинмы работают как представления. Если объекты были вновь созданы, синонимы должны быть перекомпилированы перед использованием. Как и для представлений, это случится автоматически при обращении к синониму или вручную использовав команду
ALTER SYNONYM synonym COMPILE;