Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
RBD_END.DOC
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
548.35 Кб
Скачать

Объекты в Oracle.

Объект всегда содержит два характерных элемента: атрибуты объекта (фактически это данные) и методы (функции и процедуры).

Для создания объектов используется оператор CREATE TYPE.

Процесс создания объектов поход на процесс создания пакета.

Пример

Спецификация:

CREATE Complex AS OBJECT (rpart REAL,

ipart REAL,

MEMBER Function Plus(x Complex) Return Complex

……

);

где MEMBER – ключевое слово, определяющее каким образом будет осуществляться доступ к методу.

Тело объекта:

CREATE TYPE Body Complex AS

MEMBER Plus (x Complex) Return Complex IS

begin

RETURN Complex (rpart+x.rpart, ipart+x.ipart);

end Plus;

На этом создание и описание объекта закончено. Все методы и атрибуты описаны как public и видны "снаружи" объекта.

Атрибуты

В объекте можно определить до 1000 атрибутов, но нельзя внутри объекта объявлять типы, константы, курсоры.

В существующий объект нельзя добавить методы или атрибуты.

Для создания атрибутов можно использовать любое имя, уникальное внутри объекта (хотя имя может быть неуникальным для другого объекта). В качестве атрибута можно использовать любые типы Oracle, за исключением:

  • LONG, LONG RAW, NCHAR, NCLOB, NVARCHAR2, ROWID, UROWID.

  • нельзя использовать типы, специфичные для PL/SQL – binary_integer и его подтипы, boolean, PLS_integer, record, ref_cursor, аттрибуты %TYPE и %ROWTYPE.

  • нельзя использовать типы, определенные внутри PL/SQL пакетов.

В секции декларации атрибутов нельзя использовать операторы присваивания и операции default.

Методы

Методы – это подпрограммы, которые мы определяем в объекте.

Существует два основных типа методов:

  1. методы member – эти методы можно вызывать, указав имя экземпляра объекта.

имя_экземпляра.plus(c1);

  1. объявление static – в этом случае для вызова метода используется само название объекта: object_type.minus(c1);

Объявление метода в спецификации объекта должно полностью совпадать с описанием метода в теле объекта. Методы, объявленные как member, всегда имеют параметр Self. По умолчанию для процедур параметр Self является InOut. Для функций по умолчанию Self является In.

При попытке вызова метода member из нулевого экземпляра (т.е. для данного объекта не был вызван конструктор), метод не вызывается.

Методы можно делать перегружаемыми.

Сравнение объектов

Объекты можно сравнивать:

  • как равенство и неравенство, если вы не предпринимаете никаких специальных мер. Равенство будет в том случае, если равны все атрибуты объекта.

  • при специальных мерах: использование ключевых слов MAP и ORDER. Для объекта может быть определено только одно их этих двух ключевых слов. Эти ключевые слова должны предшествовать ключевому слову member и использоваться только с функциями.

Если вы используете ключевое слово MAP, то функция данного метода должна возвращать или char или real. Сравнение будет происходить по значению, которое возвращает функция. Сам оператор сравнения будет вызывать два метода (для каждой функции по одному).

При использовании ключевого слова ORDER метод или функция должны возвращать целое (integer) значение и это значение должно быть:

  • –1, если один объект (Self-объект) меньше другого объекта (передаваемого в функцию в качестве параметра);

  • 1, если Self>объекта;

  • 0, если объекты между собой равны.

Пример

CREATE TYPE body Rational AS

MAP member Function Convert Return real IS

begin

Return num/den;

end;

Переменные num и den – это атрибуты, которые были объявлены в типе объекта (имели тип integer). Сравниваться будет результат этой функции для двух объектов.

Пример

CREATE TYPE body Customer AS

ORDER member Function Match (c Customer) Return integer IS

begin

If id<c.id then Return –1;

ElsIf id>c.id then return 1;

Else return 0;

End If;

end;

end;

Конструктор в PL/SQL всегда нужно вызывать явно.

Пример

Declare

r Complex; - задекларировали объект

Begin

r:=Complex(30,40); - явно вызван конструктор

End;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]