- •Объектно-ориентированные средства
- •Instantiable] спецификация_метода, …, ]
- •Наследование типов.
- •Isdn in integer default null,
- •Методы сравнения.
- •Примеры создания и использования объектных типов
- •Создание специальных типов данных при помощи объектных типов
- •Id integer primary key,
- •Id, last_name, first_name,
- •Id last_name first_name address.Street1 ...
- •1 Ellison Lawrence 500 Oracle Parkway ...
- •Insert into sales.Customers values (
- •1, 'Ellison', 'Lawrence', 'Oracle Corporation',
- •Создание вложенных таблиц
- •Item_id integer,
- •Id integer primary key,
- •Insert into sales.Orders values (
- •1,Sysdate, null,
- •Insert into the(select line_items from sales.Orders
- •Id integer,
- •Id integer,
- •Item_id integer,
- •Id integer,
- •Insert into sales.Parts values (sales.Part_Type(1,
- •Insert into sales.Customers
- •Values(sales.Customer_Type(1,'Ellison','Lawrence',
- •Insert into sales.Orders
- •Insert into the(select o.Line_items from orders о
- •Insert into the(select o.Line_items from orders о
- •Insert into sales.Orders
- •Values (sales.Order_Type (1,custoid,sysdate,null,
- •Id customer.Company_name
- •1 Oracle Corporation
- •Item_id part.Description quantity
- •1Pentium 200 cpu 50
- •Соблюдение взаимосвязей
- •Контрольные вопросы.
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 (