Классика баз данных - статьи

       

Объектные типы и объектные таблицы


Объектные типы в Oracle8 являлись аналогом типа записи в IUS. Объектный тип данных определялся в следующем синтаксисе:

CREATE TYPE <имя типа> AS OBJECT ( <имя поля> <тип поля>, …);

Как и в IUS, для доступа к отдельным полям значений объектных типов использовалась точечная нотация.

Методы объектных типов

В Oracle 8i при определении объектного типа, помимо спецификации структуры значений этого типа, можно было определить и набор методов данного типа. Методы представляли собой функции, написанные на PL/SQL, Java, C или другом языке и сохраненные в базе данных или вне ее (при наличии регистрации в базе данных).

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

Методы-члены вызывались в нотации

<имя_объекта>.<имя_метода> ( список_параметров ).

У них имелся неявный параметр SELF, и они могли обращаться к значениям атрибутов объекта. Под термином объект здесь понимается строка объектной таблицы. Как правило, именем объекта являлось имя объектной таблицы или ее псевдонима, используемые в операторе выборки SQL.

Статические методы вызывались в нотации

<имя_объектного_типа>.<имя_метода> ( список_параметров )

и не могли обращаться к значениям атрибутов конкретных объектов.

Методы сравнения служили для сравнения экземпляров объектов. Сравнение объектов могло производиться с помощью методов вида MAP или вида ORDER. Метод типа MAP принимает в качестве параметра объект некоторого объектного типа, а возвращает значение одного из встроенных типов, которое может использоваться в операциях сравнения и сортировки. Таким образом, этот метод выполняет отображение объекта на значение одного из встроенных типов. Метод типа ORDER сравнивает два объекта и возвращает –1, если первый объект меньше второго, 0, если объекты равны, и 1, если первый объект больше второго.

Если при определении объектного типа метод сравнения не задавался, то объекты этого типа можно было сравнивать только на равенство/неравенство, причем объекты не должны были содержать элементов типа LOB.

Содержание  Назад  Вперед