Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Объекты в ORACLE.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
143.87 Кб
Скачать

2. Реализация объектного подхода в oracle

В результате широкого распространения объектно-ориентированного подхода лидеры в производстве реляционных СУБД стремятся наделить свои продукты объектно-ориентированными возможностями, чтобы повысить конкурентоспособность своих продуктов. Компания ORACLE здесь не стала исключением.

В целом объектная реализация в ORACLE традиционна для объектного подхода вообще. Строго говоря, СУБД ORACLE не является объектной. Точнее будет сказать, что в СУБД ORACLE есть объектное расширение – возможности по созданию и использованию объектов, причем возможности эти несколько ограничены по сравнению с большинством языков высокого уровня.

Ограничения, в частности, касаются слабой реализации принципа инкапсуляции (все свойства и методы объектов являются открытыми), нет возможности вызывать перегруженные методы предков и т.д. Тем не менее, объектная модель ORACLE развивается от версии к версии, и ее возможностей уже сейчас вполне достаточно для решения большинства задач методами объектно-ориентированного подхода.

2.1. Хранение объектов в столбцах реляционных таблиц

Например, для описания некоторого абстрактного адреса создадим тип:

CREATE OR REPLACE TYPE address_typ AS OBJECT( Zip CHAR(6),

City varchar2(20),

Location VARCHAR2(50)); /

Примечание: объекты, как и пакеты, имеют интерфейс и реализацию. И также как и пакеты, создаются в два этапа – сначала заголовок (интерфейс), потом тело (реализация). В том случае, когда объект не содержит методов, тело объекта не указывается.

-- воспользуемся этим типом для описания отделов:

CREATE TABLE DEPARTMENTS(

Dep_Id NUMBER CONSTRAINT departments_pk PRIMARY KEY,

Caption VARCHAR2 (50),

Addr address_typ

);

CREATE SEQUENCE Departments_seq;

-- заведем отдел и изменим данные некоторых сотрудников:

INSERT INTO Departments VALUES

(Departments_seq.NEXTVAL, 'Отдел продаж',

NEW address_typ('141980', 'Дубна', 'Университетская, 19'));

Здесь выражение NEW address_typ('141980', 'Дубна', 'Университетская, 19') означает обращение к конструктору объекта.

Примечание: каждый объект имеет свой конструктор по умолчанию, создаваемый СУБД автоматически при компиляции объекта. Но программист имеет возможность создавать и собственные конструкторы.

-- выполним запросы к полям, содержащим объекты:

SELECT d.Caption, d.Addr.ZIP, d.Addr.City, d.Addr.Location FROM Departments d;

Примечание: перед именем поля, содержащим объект, необходимо указывать название таблицы.

2.2. Создание таблицы объектов

Кроме хранения объектов в полях реляционных таблиц существует возможность хранить объекты и в специальных объектных таблицах – таблицах, хранящих только объекты одного какого-то типа. Пример создания объектной таблицы для хранения адресов:

CREATE TABLE Addresses OF address_typ;

Таблицы объектов в ORACLE было бы точнее называть списками объектов, так как это всегда таблицы ровно из одного столбца объектного типа.

-- заполнение данными происходит, как и ранее:

INSERT INTO Addresses VALUES(

NEW address_typ('141980', 'Дубна', 'Университетская, 19'));

-- либо с неявным вызовом конструктора по умолчанию

INSERT INTO Addresses VALUES('141980', 'Дубна', 'Университетская, 19');

-- для выборки отдельных свойств объектов из объектных таблиц

SELECT a.zip, a.city, a.location FROM Addresses a;

-- для выборки всего объекта целиком (например, для передачи в качестве

-- параметра какой-нибудь процедуре) используется функция VALUE:

SELECT VALUE(a) FROM Addresses a;

Примечание: функция VALUE специально придумана для возвращения значений объектов, а не атрибутов объектов по отдельности.