Создание синонима
Функция
Определение оператора создания синонима.
Спецификация
::=
::=
::=
::=
Синтаксические правила
-
Объект, для которого создается синоним, должен существовать в момент создания синонима.
-
Если в
< создание личного синонима >
не задано< имя схемы >
, то используется текущая схема БД. -
Опция
OR REPLACE
заставляет удалять существующий в БД синоним и создавать его под тем же именем, но с указанными параметрами. -
Опция
IF NOT EXISTS
отменяет выполнение оператора, если указанный синоним уже существует в БД. -
Одновременное использование опций
IF NOT EXISTS
иOR REPLACE
запрещено. -
< Имя синонима >
не должно совпадать с именем таблиц, представлений и синонимов, в пределах< имя схемы >
, если не задано ключевое словоPUBLIC
, и с уже существующими общими синонимами, если это слово задано. -
Если указано
PUBLIC
, то синоним действует для всех пользователей БД, которые не создавали таблиц, представлений или синонимов с тем же именем. В противном случае этот синоним действует только для своего создателя, но другие пользователи также могут использовать его, задавая конструкцию< имя схемы >.< имя синонима >
. -
Конструкция вида
select ... from < имя схемы >.< имя PUBLIC-синонима > ...
является недопустимой.
Общие правила
-
Для создания PUBLIC-синонима требуется уровень прав DBA.
create table "Массив случайных чисел" (d double); create synonym RANDEM for "Массив случайных чисел"; select * from RANDEM, tab1 where d between 0.5 and 1.0 and randem.rowid=tab1.rowid; create table tab1(I int autoinc); insert into randem (d) values (0.2); insert into randem (d) values (0.4); insert into randem (d) values (0.7); insert into randem (d) values (1.0); insert into randem (d) values (1.6); select * from RANDEM, tab1 where d between 0.5 and 1.0 and randem.rowid=tab1.rowid; | 0.7 | 2 | | 1.0 | 3 |
сравните (в этом варианте локальный синоним
RANDEM
известен только внутри SQL-запроса и не конфликтует с созданным в БД глобальным синонимомRANDEM
):select * from "Массив случайных чисел" as RANDEM, tab1 where d between 0.5 and 1.0 and randem.rowid=tab1.rowid; | 0.7 | 2 | | 1.0 | 3 |
-
Для создания синонима с
< имя схемы >
требуется уровень правRESOURCE
. -
Права на выполнение DML-операций с синонимами наследуются от объектов, для которых создан синоним и проверяются на этапе выполнения операции.
-
Длина цепочки синонимов, ссылающихся друг на друга, ограничена числом 10. При большей длине цепочки считается, что таблица не найдена.
-
При выполнении запроса с
< именем синонима >
без указания< имя схемы >
вначале производится поиск синонима среди личных синонимов текущей схемы, при отсутствии – поиск среди общих синонимов.