Кто может создать домен?
Выполнить оператор 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
.