Типы данных, определенные пользователем

Тип данных, определенный пользователем (UDT – User Defined Type) – это именованный тип данных, создаваемый на основе существующего типа, но, тем не менее, рассматриваемый как несовместимый с ним. В DB2 существует две разновидности типов данных, определенных пользователем:

• особый (distinct) тип, который разделяет внутреннее представление с некоторым встроенным типом данных DB2,

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

Мы ограничимся здесь рассмотрением особых типов данных, определенных пользователем.

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

Возможность создания собственных особых типов данных дает ряд преимуществ:

1. Определяя новые типы, можно расширить множество типов данных, предоставляемых DB2 для реализации прикладной системы.

2. Для нового типа данных можно, используя функции, определенные пользователем (UDF – User-Defined Functions), определить свою семантику и свое поведение.

3. Сильная типизация, используемая DB2, гарантирует, что особый тип данных будет использован надлежащим образом – только функции, явно определенные для конкретного особого типа данных, может обрабатывать значения соответствующего типа.

Особый тип данных, определенный пользователем, создается с помощью предложения CREATE DISTINCT TYPE, имеющего следующий синтаксис:

CREATE DISTINCT TYPE имя_нового_типа AS исходный_тип_данных WITH COMPARISON

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

WITH COMPARISON – указывает, что система должна сгенерировать функции сравнения, позволяющие сравнивать между собой с помощью операций сравнения (=, <>, <, <=, >, >=) значения нового типа. Конструкция WITH COMPARISON не может быть указана для новых типов, создаваемых на основе LOB и LONG типов данных (LONG VARCHAR, LONG VARGRAPHIC, BLOB, CLOB, DBCLOB).

При создании нового типа также генерируются функции преобразования из исходного типа в новый тип, и наоборот. Имена генерируемых функций преобразования совпадают с именами типов данных. Так, если src – определяет значение исходного типа данных, тогда эквивалентное значение нового типа можно получить с помощью сгенерированной функции имя_нового_типа (src); если trgt – значение нового типа, эквивалентное значение исходного типа можно получить с помощью функции исходный_тип_данных (trgt).

Определенный пользователем особый тип данных может использоваться, наравне со встроенными типами данных, при создании таблиц (в предложении CREATE TABLE).

Примеры:

Пример 1. Создать особый тип данных с именем MYOWN на основе типа INTEGER:

CREATE DISTINCT TYPE MYOWN AS INTEGER WITH COMPARISON

В результате для типа данных MYOWN генерируются операции сравнения (=, <>, <, <=, >, >=) и функции преобразования типа: INTEGER(MYOWN), возвращающая значение типа INTEGER, и MYOWN(INTEGER), возвращающая значение типа MYOWN.

Пример 2. Создать особый тип данных с именем MILES на основе типа DOUBLE.

CREATE DISTINCT TYPE MILES AS DOUBLE WITH COMPARISONS

В результате для типа данных MILES генерируются операции сравнения (=, <>, <, <=, >, >=) и функции преобразования типа: DOUBLE(MILES), возвращающая значение типа DOUBLE, и MILES(DOUBLE), возвращающая значение типа MILES.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: