Объявление типа создает определенный тип данных (см. 8.3.2) и задает идентификатор для ссылки на данный тип. В частности, имя определенного типа данных объявляется как type_id. Представлением данного типа данных является underlying_type. Область определения определенного типа данных совпадает с областью определения базисного типа underlying_type, но может быть дополнительно ограничена конструкцией where_clause (при ее наличии). Определенный тип данных является конкретизацией базисного типа данных и, следовательно, совместимым с базисным типом. Исключением являются конструкционные типы данных, когда определенный тип данных используется для задания имени конструкционного типа данных, и фактически не является конкретизацией конструкционного типа данных даже в случае, если выбираемый тип данных SELECT ограничен правилом WHERE.
Примечание - Несколько определенных типов данных могут быть связаны с одним и тем же представлением. Имена могут помочь пользователю в понимании назначения (или контекста) применения базисного типа данных underlying_type.
Синтаксис: |
Правило: результатом объявлений типа TYPE не должны быть циклические определения типа.
Пример - Следующее объявление задает определенный тип данных с именем person_name и базовым представлением STRING. Определенный тип person_name после данного объявления доступен для использования в качестве представления атрибутов, локальных переменных и формальных параметров. Это придает ему большую осмысленность, чем простое использование типа STRING.
TYPE person_name = STRING;
END TYPE;
Правила области определения (условие WHERE).
Правила области определения устанавливают ограничения для области определения определенного типа данных. Область определения определенного типа данных является областью определения его базисного представления, ограниченного правилом (или правилами) области определения. Правила области определения указываются после ключевого слова WHERE.
Синтаксис: |
Для каждого объекта domain_rule может быть задана метка правила.
Примечание - Если метки правил заданы, то они могут использоваться в метках комментария (см. 7.1.6.3) или для идентификации правил в реализациях, например в документации, сообщениях об ошибках и спецификациях применения. Задание меток правил для указанных целей является желательным.
Правила и ограничения:
a) Результатом оценки каждого правила области определения должно быть логическое (TRUE, FALSE или UNKNOWN) или неопределенное (?) значение.
b) Ключевое слово SELF (см. 14.5) должно присутствовать в каждом правиле области определения, по крайней мере, один раз. Правило области определения должно оцениваться для конкретного значения из области определения базисного типа путем подстановки данного значения вместо каждого ключевого слова SELF, присутствующего в правиле.
c) Правило области определения должно быть применено, если оценкой выражения является TRUE; правило должно быть отклонено, если оценкой выражения является FALSE; правило не должно быть ни применено, ни отклонено, если оценкой выражения является UNKNOWN или неопределенное (?) значение.
d) Область определения определенного типа данных состоит из всех значений области определения базисного типа, не нарушающих ни одного правила области определения.
e) Метки правил области определения должны быть уникальными в рамках данного объявления типа TYPE.
Пример - Может быть создан определенный тип данных, ограничивающий базисный целочисленный тип данных только положительными целыми числами.
TYPE positive = INTEGER;
WHERE
notnegative : SELF > 0;
END_TYPE;
Любой атрибут, локальная переменная или формальный параметр, объявленный принадлежащим к типу positive, при этом будет ограничен только положительными целочисленными значениями.