Кто может создать домен?
Выполнить оператор CREATE DOMAIN могут:
-
Пользователи с привилегией
CREATE DOMAIN.
Пользователь, создавший домен, становится его владельцем.
Выполнить оператор CREATE DOMAIN могут:
Пользователи с привилегией CREATE DOMAIN.
Пользователь, создавший домен, становится его владельцем.
CREATE DOMAIN CUSTNO AS
INTEGER DEFAULT 10000
CHECK (VALUE > 1000);
CREATE DOMAIN D_BOOLEAN AS
CHAR(3) CHECK (VALUE IN ('Да', 'Нет'));
UTF8 и порядком сортировки UNICODE_CI_AI.CREATE DOMAIN FIRSTNAME AS
VARCHAR(30) CHARACTER SET UTF8
COLLATE UNICODE_CI_AI;
CREATE DOMAIN D_DATE AS
DATE DEFAULT CURRENT_DATE
NOT NULL;
Создание домена, определённого как массив из 2 элементов типа NUMERIC(18, 3), нумерация элементов начинается с 1.
CREATE DOMAIN D_POINT AS
NUMERIC(18, 3) [2];
|
Note
|
Вы можете использовать домены определённые как массив только для определения столбцов таблиц.Вы не можете использовать такие домены для определения локальных переменных и аргументов PSQL модулей. |
ALTER DOMAINИзменение текущих характеристик домена или его переименование.
DSQL, ESQL.
ALTER DOMAIN domain_name
[TO new_name]
[TYPE <datatype>]
[{SET DEFAULT {<literal> | NULL | <context_var>}} | DROP DEFAULT]
[{SET | DROP} NOT NULL]
[{ADD [CONSTRAINT] CHECK (<dom_condition>)} | DROP CONSTRAINT]
<datatype> ::=
<scalar_datatype> | <blob_datatype> | <array_datatype>
<scalar_datatype> ::= См. Синтаксис скалярных типов данных
<blob_datatype> ::= См. Синтаксис типа данных BLOB
<array_datatype> ::= См. Синтаксис массивов
<dom_condition> ::=
<val> <operator> <val>
| <val> [NOT] BETWEEN <val> AND <val>
| <val> [NOT] IN (<val> [, <val> ...] | <select_list>)
| <val> IS [NOT] NULL
| <val> IS [NOT] DISTINCT <val>
| <val> IS [NOT] {TRUE | FALSE | UNKNOWN}
| <val> [NOT] CONTAINING <val>
| <val> [NOT] STARTING [WITH] <val>
| <val> [NOT] LIKE <val> [ESCAPE <val>]
| <val> [NOT] SIMILAR TO <val> [ESCAPE <val>]
| <val> <operator> {ALL | SOME | ANY} (<select_list>)
| [NOT] EXISTS (<select_expr>)
| [NOT] SINGULAR (<select_expr>)
| (<dom_condition>)
| NOT <dom_condition>
| <dom_condition> OR <dom_condition>
| <dom_condition> AND <dom_condition>
<operator> ::=
<> | != | ^= | ~= | = | < | > | <= | >=
| !< | ^< | ~< | !> | ^> | ~>
<val> ::=
VALUE
| <literal>
| <context_var>
| <expression>
| NULL
| NEXT VALUE FOR genname
| GEN_ID(genname, <val>)
| CAST(<val> AS <cast_type>)
| (<select_one>)
| func(<val> [, <val> ...])
<cast_type> ::=
<datatype>
| [TYPE OF] domain
| TYPE OF COLUMN rel.col
| Параметр | Описание |
|---|---|
domain_name |
Имя домена. |
new_name |
Новое имя домена.Может содержать до 63 символов. |
datatype |
Тип данных SQL. |
literal |
Литерал. |
context_var |
Любая контекстная переменная, тип которой совместим с типом данных домена. |
dom_condition |
Условие домена. |
collation |
Порядок сортировки. |
select_one |
Оператор |
select_list |
Оператор |
select_expr |
Оператор |
expression |
Выражение. |
genname |
Имя последовательности (генератора). |
func |
Скалярная функция. |
Оператор ALTER DOMAIN изменяет текущие характеристики домена, в том числе и его имя.В одном операторе ALTER DOMAIN можно выполнить любое количество изменений домена.
TO nameПредложение TO позволяет переименовать домен.Имя домена можно изменить, если не существует зависимостей от этого домена, т.е.столбцов таблиц, локальных переменных и аргументов процедур, ссылающихся на данный домен.
SET DEFAULTПредложение SET DEFAULT позволяет установить новое значение по умолчанию.Если домен уже содержал значение по умолчанию, то установка нового значения по умолчанию не требует предварительного удаления старого.
DROP DEFAULTПредложение DROP DEFAULT удаляет ранее установленное для домена значение по умолчанию.В этом случае значением по умолчанию становится значение NULL.
ADD CONSTRAINT CHECKПредложение ADD [CONSTRAINT] CHECK добавляет условие ограничения домена.Если домен уже содержал ограничение CHECK, то его предварительно необходимо удалить с помощью предложения DROP CONSTRAINT.
TYPEПредложение TYPE позволяет изменить тип домена на другой допустимый тип.Не допустимы любые изменения типа, которые могут привести к потере данных.Например, количество символов в новом типе для домена не может быть меньше, чем было установлено ранее.
|
Note
|
Изменение типа не поддерживается для типа BLOB и массивов. |
SET NOT NULLПредложение SET NOT NULL устанавливает ограничение NOT NULL для домена.В этом случае для переменных и столбцах базирующихся на домене значение NULL не допускается.
|
Note
|
Успешная установка ограничения NOT NULL для домена происходит только после полной проверки данных таблиц, столбцы которых базируются на домене.Это может занять довольно длительное время. |
|
Warning
|
При изменении описания домена, существующий PSQL код, может стать некорректным.Информация о том, как это обнаружить, находится в приложении Поле RDB$VALID_BLR. |
DROP NOT NULLПредложение DROP NOT NULL удаляет ограничение NOT NULL для домена.
ALTER DOMAINЕсли домен был объявлен как массив, то изменить ни его тип, ни размерность нельзя. Также нет возможности изменить любой другой тип на тип массив.
Не существует способа изменить сортировку по умолчанию. В этом случае необходимо удалить домен и пересоздать его с новыми атрибутами.
Выполнить оператор ALTER DOMAIN могут:
Владелец домена;
Пользователи с привилегией ALTER ANY DOMAIN.
ALTER DOMAIN CUSTNO
INTEGER DEFAULT 2000;
ALTER DOMAIN D_BOOLEAN TO D_BOOL;
ALTER DOMAIN D_DATE
DROP DEFAULT
ADD CONSTRAINT CHECK (VALUE >= date '01.01.2000');
ALTER DOMAIN D_DATE
DROP CONSTRAINT;
ALTER DOMAIN D_DATE
ADD CONSTRAINT CHECK
(VALUE BETWEEN date '01.01.1900' AND date '31.12.2100');
ALTER DOMAIN FIRSTNAME
TYPE VARCHAR(50) CHARACTER SET UTF8;
ALTER DOMAIN FIRSTNAME SET NOT NULL;
DROP DOMAINУдаление существующего домена.
DSQL, ESQL.
DROP DOMAIN domain_name
| Параметр | Описание |
|---|---|
domain_name |
Имя домена. |
Оператор DROP DOMAIN удаляет домен, существующий в базе данных.Невозможно удалить домен, на который ссылаются столбцы таблиц базы данных или если он был задействован в одном из PSQL модулей.Чтобы удалить такой домен, необходимо удалить из таблиц все столбцы, ссылающиеся на домен и удалить все ссылки на домен из PSQL модулей.
Выполнить оператор DROP DOMAIN могут:
Владелец домена;
Пользователи с привилегией DROP ANY DOMAIN.