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

Функция

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

Спецификация
   
< создание схемы >::=
CREATE [IF NOT EXISTS | OR REPLACE] SCHEMA имя схемы
[AUTHORIZATION имя пользователя]
[DEFAULT CHARACTER SET имя кодировки]
Синтаксические правила
  1. < Имя схемы > должно быть уникально среди имен существующих схем, пользователей и ролей.

  2. Создание схемы допускается только для текущего пользователя, т.е. в опции AUTHORIZATION < имя пользователя > должно быть именем текущего пользователя.

  3. Опция DEFAULT CHARACTER SET допустима, но в текущей версии игнорируется. Кодовая страница по умолчанию задаётся либо для БД в целом (set database default character set), либо для каждого активного канала в отдельности (set names).

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

    Примечание

    Если в схеме существуют объекты, то при выполнении команды OR REPLACE будет выдано сообщение 1513 «Пользователя (или схему) нельзя удалить без опции CASCADE из-за существующих объектов». Для удаления схемы совместно с объектами необходимо использовать команду «Удаление схемы» с опцией CASCADE.

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

Общие правила
  1. Указывая имя схемы, пользователь может работать с любым объектом любой из своих схем и с объектами других пользователей при наличии соответствующих прав.

  2. Без указания имени схемы допускается работа только с объектами текущей схемы.

  3. Рекурсивные схемы не допускаются.

  4. Для создания схемы требуется привилегия RESOURCE.

Пример
create or replace user TEST identified by '12345678';
grant resource to TEST;
username TEST/12345678
create or replace schema SCHEMA1;
create or replace table TEST(i int);
insert into TEST values(1);

!Должно вернуться значение 1
select * from TEST;
|          1|

set schema SCHEMA1;
create or replace table TEST(i int);
insert into TEST values(2);
!Должно вернуться значение 2
select * from TEST;
|          2|

!Должно вернуться значение 1
select * from TEST.TEST;
|          1|

!Должно вернуться значение 2
select * from SCHEMA1.TEST;
|          2|

username SYSTEM/MANAGER8
drop user TEST cascade;