Определение домена

 

Для определения домена в SQL используется оператор CREATE DOMAIN. Общий синтаксис этого оператора следующий:*

 

domain_definition ::= CREATE DOMAIN domain_name [AS] data_type
[ default_definition ]

[ domain_constraint_definition_list ]

 

Здесь domain_name задает имя создаваемого домена**, data_type – спецификация определяющего типа данных. В необязательных разделах default_definition и domain_constraint_definition_list специфицируются значение домена по умолчанию*** и набор ограничений целостности, которые будут применяться к любому столбцу, определенному на этом домене.

 

Раздел default_definition имеет вид

 

DEFAULT { literal | niladic_function | NULL }*

 

Здесь literal представляет любое допустимое литеральное значение определяющего типа домена, NULL обозначает неопределенное значение, а niladic_function может задаваться в одной из следующих форм:

 

USER

CURRENT_USER

SESSION_USER

SYSTEM_USER

CURRENT_DATE

CURRENT_TIME

CURRENT_TIMESTAMP**

 

Если в операторе CREATE DOMAIN значение по умолчанию не специфицируется, считается, что такого значения нет. Однако позже к определению домена можно добавить раздел значения по умолчанию с помощью оператора ALTER DOMAIN. Кроме того, этот оператор позволяет удалить раздел значения по умолчанию из существующего определения домена.

 

Элемент списка domain_constraint_definition_list имеет вид

 

[ CONSTRAINT constraint_name ] CHECK ( conditional_expression )

 

Необязательный раздел CONSTRAINT constraint_name позволяет определить имя нового ограничения целостности. Если явное указание имени отсутствует, ограничению назначается имя, автоматически генерируемое системой. Что касается вида условного выражения, служащего собственно ограничением целостности, то в стандарте запрещается лишь прямое или косвенное использование в нем домена, в определение которого входит данное условное выражение.*** Однако наиболее естественным (и наиболее распространенным) видом ограничения домена является следующий:

 

CHECK (VALUE IN (list_of_valid_values))

 

Такое ограничение запрещает появление в любом столбце, определенном на данном домене, любого значения определяющего типа, не входящего в список допустимых значений.