Создание синонима

Функция

Определение оператора создания синонима.

Спецификация
   
< создание публичного синонима >::=
CREATE [IF NOT EXISTS | OR REPLACE] PUBLIC
SYNONYM имя синонима FOR спецификация объекта
< создание личного синонима >::=
Синтаксические правила
  1. Объект, для которого создается синоним, должен существовать в момент создания синонима.

  2. Если в < создание личного синонима > не задано < имя схемы >, то используется текущая схема БД.

  3. Опция OR REPLACE заставляет удалять существующий в БД синоним и создавать его под тем же именем, но с указанными параметрами.

  4. Опция IF NOT EXISTS отменяет выполнение оператора, если указанный синоним уже существует в БД.

  5. Одновременное использование опций IF NOT EXISTS и OR REPLACE запрещено.

  6. < Имя синонима > не должно совпадать с именем таблиц, представлений и синонимов, в пределах < имя схемы >, если не задано ключевое слово PUBLIC, и с уже существующими общими синонимами, если это слово задано.

  7. Если указано PUBLIC, то синоним действует для всех пользователей БД, которые не создавали таблиц, представлений или синонимов с тем же именем. В противном случае этот синоним действует только для своего создателя, но другие пользователи также могут использовать его, задавая конструкцию < имя схемы >.< имя синонима >.

  8. Конструкция вида

    select ... from < имя схемы >.< имя PUBLIC-синонима > ...

    является недопустимой.

Общие правила
  1. Для создания 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 |
  2. Для создания синонима с < имя схемы > требуется уровень прав RESOURCE.

  3. Права на выполнение DML-операций с синонимами наследуются от объектов, для которых создан синоним и проверяются на этапе выполнения операции.

  4. Длина цепочки синонимов, ссылающихся друг на друга, ограничена числом 10. При большей длине цепочки считается, что таблица не найдена.

  5. При выполнении запроса с < именем синонима > без указания < имя схемы > вначале производится поиск синонима среди личных синонимов текущей схемы, при отсутствии – поиск среди общих синонимов.