Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Oracle / Лекции / Лек_ORAC / LCD / Объектно-ориентированные средства.doc
Скачиваний:
51
Добавлен:
16.04.2013
Размер:
105.47 Кб
Скачать

Id integer primary key,

last_name VARCHAR2(50),

first_name VARCHAR2(50),

company_name VARCHAR2(50),

address pub.Address_Type)

. . .

Аналогичным образом разработчик может объявить параметры для адреса в хранимой процедуре:

CREATE OR REPLACE PROCEDURE sales.new_customers (

custid IN INTEGER,

last IN VARCHAR2,

first IN VARCHAR2,

address IN pub.Address_Type)

BEGIN

. . .

Чтобы работать со столбцом реляционной таблицы, описанным при помощи объектного типа, в операторах DMLдолжны быть организованы ссылки на атрибуты столбца с использованием специального синтаксиса. К примеру, чтобы обратиться с запросом к таблицеCUSTOMERS, использующей специальный тип данныхADDRESS_TYPE, в оператореSELECTнеобходимо применить расширенную форму стандартной уточняющей записи через точку для ссылки на определенные атрибуты столбцаADDRESS:

SELECT

Id, last_name, first_name,

address.street1, address.street2, address.city,

address.state, address.zipcode, address.country

FROM sales.customers;

Результаты выполнения этого запроса будут выглядеть примерно так:

Id last_name first_name address.Street1 ...

-- -------------- ------------- ------------------ ---

1 Ellison Lawrence 500 Oracle Parkway ...

Точно так же для обновления конкретного атрибута столбца, описан­ного объектным типом, необходимо воспользоваться расширенной формой стандартной уточняющей записи через точку, чтобы сослаться на этот атрибут:

UPDATE sales.customers

SET address.zipcode = '94065'

WHEREid= 1;

Процесс вставки строки в таблицу, столбец которой описан объектным типом, происходит несколько по-иному. Для этого следует воспользоваться так называемым методом-конструктором объектного типа. Oracleавтоматически создает метод-конструктор для каждого объектного типа, так что можно строить новые объекты, имеющие этот тип. Конструктор объектного типа автоматически получает то же самое имя, что и собственно тип. Например, с помощью следующего опера­тораINSERTможно ввести нового клиента в таблицуCUSTOMERSпри помощи метода-конструктора для типаADDRESS_TYPE:

Insert into sales.Customers values (

1, 'Ellison', 'Lawrence', 'Oracle Corporation',

pub.Address_Type (

'500 Oracle Parkway', 'Box 659510',

'Redwood Shores', 'CA', '95045', 'USA'));

В этом примере с типом данных ADDRESS_TYPE, определенным пользователем, показано, как применять объектные типы вOracleдля упрощения процесса разработки реляционной базы данных, не переходя полностью к объектно-ориентированной базе данных. Теперь посмотрим, как лучше использовать объектные типы - как создавать и применять вложенные таблицы.

Создание вложенных таблиц

В данном примере показано, как можно вложить одну таблицу в другую при помощи объектного типа. Когда дочерняя таблица вклады­вается в родительскую, Oracleавтоматически создает взаимоотношения между всеми строками родительской и соответствующими строками вложенной таблицы. Применение вложенных таблиц устраняет необходимость организации реляционных соединений в приложениях и тем самым упрощает разработку приложений.

Вложенные таблицы удобны при наличии отношений типа «основа-деталь», в которых детальные строки хранят уникальную информацию. Для примера рассмотрим обычные таблицы ORDERSиITEMSреляционной базы данных по вводу заказов. Каждый пункт заказа - это уникальная совокупность данных, имеющих отношение к конкретному заказу. Отношения между этими таблицами как раз и являются отноше­ниями типа «основа-деталь», и поэтому в данном случае хорошим решением может стать создание вложенной таблицы. В этом примере создаются упрощенные типыITEM_TYPE(без ссылок на соответству­ющий идентификатор элемента ассортимента) иITEM_LIST, которые можно использовать впоследствии для вложения таблицыITEMSв таблицуORDERS.

CREATE OR REPLACE TYPE sales.item_type AS OBJECT (