Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Новое на сайте
Топовые новости
Новое

Инструкция CREATE/ALTER TYPE

Инструкция CREATE TYPE позволяет создавать пользовательские типы (user-defined type, UDT), то есть, пользовательские типы данных, или — в терминах объектно-ориентированного программирования — «классы». Пользовательские типы расширяют возможности SQL в сфере объектно-ориентированного программирования, разрешая использовать наследование и другую объектно-ориентированную функциональность. Вы также можете создавать с помощью инструкции CREATE TABLE так называемые объектные таблицы (typed table), используя предварительно созданный с помощью инструкции CREATE TYPE тип. Объектные таблицы основываются на пользовательских типах и эквивалентны «экземплярам классов» (instantiated classes) объектно-ориентированного программирования.

Следующий синтаксис изменяет существующий пользовательский тип данных.

ALTER TYPE тип_данных {ADD ATTRIBUTE определение_типа DROP ATTRIBUTE имя_типа}

Ключевые слова

(CREATE | ALTER} TYPE imnjnuna

Создается новый тип или изменяется существующий тип имя_типа.

UNDER имя супертипа

Создается подтип, который зависит от одного существующего указанного супертипа. (Пользовательский тип может быть супертипом, если он определяется как NOT FINAL.)

AS [имя_нового_пользовательского_типа] тип_данных [атрибут] [, …]

Определяются атрибуты типа, как если бы это были объявления столбцов без ограничений в инструкции CREATE TABLE. Вы должны определить UDT-атрибут либо для существующего типа данных, например VARCHAR(IO), либо для другого, ранее созданного пользовательского типа, либо даже для пользовательского домена. При создании пользовательского типа на основе уже существующего типа данных (например, CREATE TYPE myjype AS INT) создается простой тип (distinct type), а пользовательский тип, созданный с определением атрибутов, является структурным типом (structured type). Ниже перечислены допустимые атрибуты структурных типов.

ON DELETE NO ACTION

Если происходит нарушение внешнего ключа, генерируется ошибка (по умолчанию).

ON DELETE RESTRICT

Синоним NO ACTION.

ON DELETE CASCADE

В столбце со ссылкой устанавливается значение, равное значению из столбца, на который он ссылается.

ON DELETE SET NULL

В столбец со ссылкой записывается значение NULL.

ON DELETE SET DEFAULT значение

Определяется значение по умолчанию для пользовательского типа, если пользователь не указал никакого значения. Подчиняется тем же правилам, что и предложение DEFAULT, описанное в разделе «Инструкция CREATE/ALTER TABLE».

COLLATE имя сопоставления

Пользовательскому типу присваивается сопоставление, то есть порядок сортировки. Если предложение опущено, применяется сопоставление из базы данных, в которой был создан пользовательский тип. Подчиняется тем же правилам, что и предложение COLLATION, описанное в разделе «Инструкция CREATE/ ALTER TABLE».

[NOT] INSTANTIABLE

Указывается, что пользовательский тип может быть реализован. Предложение IN-STANTJABLE является обязательным для объектных таблиц, но не для стандартных пользовательских типов.

[NOT] FINAL

Является обязательным для всех пользовательских типов. Предложение FINAL означает, что пользовательский тип не может иметь подтипов. Предложение NOT FINAL означает, что пользовательский тип может иметь подтипы.

REF

Указывается созданное системой или пользователем описание ссылки, то есть своего рода уникального идентификатора, который играет роль указателя, на который может ссылаться другой тип. Ссылаясь на существующие типы с помощью описания ссылки, новые типы могут наследовать свойства уже имеющихся. Существует три способа указать для СУБД, каким образом столбец ссылок объектной таблицы будет получать значения (то есть описание ссылки). Эти способы таковы: имя_нового_пользовательского_типа [, …]

Объявляется, что описание ссылки предоставляет другой существующий пользовательский тип с именем имя_нового_пользовательского_типа.

IS SYSTEM GENERA TED

Объявляется, что описание ссылки будет генерироваться системой. (Это можно считать автоматически инкрементируемым столбцом.) Если предложение REF опущено, этот вариант используется по умолчанию.

USING тип_данных [CAST {(SOURCE AS REF) (REF AS SOURCE) WITH идентификатор]]

Объявляется, что описание ссылки предоставляет пользователь. Это осуществляется при помощи существующего типа данных и при желании с использованием приведения типа значения. Вы можете использовать конструкцию CAST (SOURCE AS REF) WITH идентификатор, чтобы привести значение указанного типа_данных к типу ссылки на структурный тип. Вы можете использовать конструкцию CAST (REF AS SOURCE) WITH идентификатор, чтобы привести значение структурного типа к указанному типу_данных. Предложение WITH позволяет объявить дополнительный идентификатор для приведенного типа данных.

CAST {(SOURCE AS DISTINCT) (DISTINCT AS SOURCE)} WITH идентификатор] [определение_метода […]

Для пользовательского типа объявляется один или несколько уже существующих методов. Метод — это просто специализированная пользовательская функция, которая создается при помощи инструкции CREATE METHOD. Предложение определение_метода не нужно использовать в структурных типах, поскольку их методы создаются неявно. Заданные по умолчанию параметры метода следующие: LANGUAGE SQL, PARAMETER STYLE SQL, NOT DETERMINISTIC, CONTAINS SQL и RETURN NULL ON NULL INPUT.

ADD ATTRIBUTE определение_типа

К существующему пользовательскому типу добавляется дополнительный атрибут с использованием формата, описанного ранее для предложения AS. Используется в инструкции ALTER TABLE.

DROP ATTRIBUTE имя_типа

Из существующего пользовательского типа удаляется атрибут. Используется в инструкции ALTER TABLE.

Источник