FirebirdSQL logo
 SHADOWTABLE 

CREATE DOMAIN

Назначение

Создание нового домена.

Доступно в

DSQL, ESQL.

Синтаксис
CREATE DOMAIN name [AS] <datatype>
  [DEFAULT {<literal> | NULL | <context_var>}]
  [NOT NULL] [CHECK (<dom_condition>)]
  [COLLATE collation_name];

<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
Table 1. Параметры оператора CREATE DOMAIN
Параметр Описание

name

Имя домена.Может содержать до 63 символов.

datatype

Тип данных SQL.

literal

Литерал.

context_var

Любая контекстная переменная, тип которой совместим с типом данных домена.

dom_condition

Условие домена.

collation_name

Порядок сортировки.

charset

Набор символов.

select_one

Оператор SELECT выбирающий один столбец и возвращающий только одну строку.

select_list

Оператор SELECT выбирающий один столбец и возвращающий ноль и более строк.

select_expr

Оператор SELECT выбирающий несколько столбцов и возвращающий ноль и более строк.

expression

Выражение.

genname

Имя последовательности (генератора).

func

Скалярная функция.

Оператор CREATE DOMAIN создаёт новый домен.

В качестве базового типа домена можно указать любой тип данных SQL.

Детали для конкретного типа

Массивы
  • Если домен должен быть массивом, базовым типом может быть любой тип данных SQL, кроме BLOB и массива.

  • Размеры массива указаны в квадратных скобках.(В синтаксисе эти скобки заключены в кавычки, чтобы отличать их от квадратных скобок, обозначающих необязательные элементы синтаксиса).

  • Для каждого измерения массива указывается одно или два целых числа, которые определяют нижнюю и верхнюю границы диапазона индекса:

    • По умолчанию массивы начинаются с 1.Нижняя граница является неявной, и необходимо указать только верхнюю границу.Когда указано только одно число меньше 1, то это определяет диапазон num .. 1, а число больше 1 определяет диапазон 1 .. num.

    • Когда указано два числа, разделенных двоеточием (‘:’) и необязательный пробел, то если второе большее, чем первое, это явно определяет диапазон индексов.Одна или обе границы могут быть меньше нуля, если верхняя граница больше нижней.

  • Если массив имеет несколько измерений, определения диапазонов для каждого измерения должны быть разделены запятыми и необязательными пробелами.

  • Индексы проверяются только, если значение массива действительно существует.

  • Это означает, что сообщения об ошибках относительно недопустимых индексов не будут возвращаться, если выбор конкретного элемента массива ничего не вернет или если поле массива имеет значение NULL.

Строковые типы

Для типов CHAR, VARCHAR и BLOB с подтипом text можно указать набор символов в предложении CHARACTER SET.Если набор символов не указан, то по умолчанию принимается тот набор символов, который был указан при создании базы данных.

Warning

Если же при создании базы данных не был указан набор символов, то при создании домена по умолчанию принимается набор символов NONE.В этом случае данные хранятся и извлекаются, так как они были поданы.В столбец, основанный на таком домене, можно загружать данные в любой кодировке, но невозможно загрузить эти данные в столбец с другой кодировкой.Транслитерация не выполняется между исходными и конечными кодировками, что может приводить к ошибкам.

Предложение DEFAULT

Необязательное предложение DEFAULT позволяет указать значение по умолчанию для домена.Это значение будет помещено в столбец таблицы, который ссылает на данный домен, при выполнении оператора INSERT, если значение не будет указано для этого столбца.Локальные переменные и аргументы PSQL модулей, которые ссылаются на этот домен, будут инициализированы значением по умолчанию.В качестве значения по умолчанию может быть литерал совместимый по типу, неизвестное значение NULL и контекстная переменная, тип которой совместим с типом домена.

Ограничение NOT NULL

Предложение NOT NULL запрещает столбцам и переменным, основанным на домене, присваивать значение NULL.

Ограничение CHECK

Необязательное предложение CHECK задаёт ограничение домена.Ограничение домена задаёт условия, которому должны удовлетворять значения столбцов таблицы или переменных, которые ссылаются на данный домен.Условие должно быть помещено в круглые скобки.Условие — это логическое выражение, называемое также предикат, которое может возвращать значения TRUE (истина), FALSE (ложь) и UNKNOWN (неизвестно). Условие считается выполненным, если предикат возвращает значение TRUE или UNKNOWN (эквивалент NULL). Если предикат возвращает FALSE, то значение не будет принято.

Ключевое слово VALUE

Ключевое слово VALUE в ограничении домена является заменителем столбца таблицы, который основан на данном домене, или переменной PSQL модуля.Оно содержит значение, присваиваемое переменной или столбцу таблицы.Ключевое слово VALUE может быть использовано в любом месте ограничения CHECK, но обычно его используют в левой части условия.

COLLATE

Необязательное предложение COLLATE позволяет задать порядок сортировки, если домен основан на одном из строковых типов данных (за исключением BLOB). Если порядок сортировки не указан, то по умолчанию принимается порядок сортировки умалчиваемый для указанного набора сортировки при создании домена.