- •Объектно-ориентированные средства
- •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
- •Соблюдение взаимосвязей
- •Контрольные вопросы.
Item_id integer,
quantity INTEGER);
CREATE OR REPLACE TYPE sales.item_list AS TABLE OF
sales.item_Type;
CREATE TABLE sales.orders (
Id integer primary key,
order_date DATE,
ship_date DATE,
line_items sales.item_list)
NESTED TABLE line_items STORE AS items;
Для упрощения этого примера и для того, чтобы вы могли сосредоточиться непосредственно на рассмотрении вложенных таблиц, тип ITEM_TYPEне содержит атрибута для номера элемента ассортимента, а в таблицеORDERSотсутствует столбец с идентификаторами клиентов. В примерах, приведенных ниже, показана более полная схема, включающая объектные таблицы, для которых используются ссылки.
При вложении одной таблицы в другую Oracleсохраняет данные в одном физическом сегменте данных, но создает в словаре данных две логические таблицы. В предыдущем примере таблицаORDERSи соответствующая ей вложенная таблицаITEMSсоздаются как один сегмент, но как две различные таблицы.
Работа с вложенными таблицами требует использования специального синтаксиса DML. Например, приложение может вводить новый заказ и соответствующие пункты в новую таблицуORDERSпри помощи одного оператораINSERTс использованием конструкторов для ввода пунктов заказа во вложенную таблицу.
Insert into sales.Orders values (
1,Sysdate, null,
sales.item_List(
sales.item_Type(1, 22),
sales.item_Type(2, 100)));
Чтобы работать с отдельными строками вложенной таблицы, SQL-операторы должны всегда обращаться к основной таблице при помощи так называемого сглаженного подзапроса (flattened sub-query), который описывается специальным SQL-выражениемTHE. Специалисту в области реляционных систем это выражение может показаться несколько странным. Однако если прочитать (естественно, по-английски) SQL-операторы, содержащие сглаженные подзапросы, вслух, то причины использования выраженияTHEстановятся более понятны. К примеру, следующий оператор вводит в существующий заказ еще один пункт при помощи сглаженного подзапроса. Комментарий объясняет причины использования выраженияTHE.
-- Вставить новый пункт в указанный ("the")
-- список пунктов заказа #1
Insert into the(select line_items from sales.Orders
WHERE id = 1) VALUES (3,200);
Сглаженный подзапрос следует использовать и для считывания строк вложенной таблицы.
-- Выбрать идентификаторы и количество указанных
-- ("the") пунктов— заказа #1
SELECT item_id, quantity
FROM THE (SELECT line_items FROM sales.orders
WHERE id = 1)
ORDER BY item_id;
ITEM_ID QUANTITY
------- --------
1 22
2 100
3 200
Для удаления строки вложенной таблицы также необходимо применять сглаженные подзапросы. Например, с помощью следующего оператора удаляется третий пункт заказа в таблице ORDERS.
-- удалить те ("the") пункты заказа # 1,
-- идентификатор которых равен 3
DELETE THE (SELECT line_items FROM sales.orders
WHERE id = 1) о
WHERE o.item_id = 3;
Создание объектных таблиц
Во всех предыдущих примерах было показано, как использовать объектные типы для усовершенствования процесса создания объектов реляционных баз данных, таких как таблицы и хранимые процедуры. Но объектные типы можно использовать и для создания объектных таблиц. Объектная таблица (object table) —это таблица базы данных, которая определяется с помощью только объектного типа, а не с использованием реляционных столбцов и т.д. При создании объектной таблицы ее столбцы соответствуют атрибутам применяемого для этого объектного типа.
Строки объектной таблицы являются объектами, имеющими тип этой таблицы. Каждый объект в объектной таблице имеет уникальный идентификатор объекта (OID - object identifier).Oracleавтоматически индексирует OID и гарантирует, что он уникален среди всех других. Эти идентификаторы используются вOracleдля описания взаимоотношений между различными объектными таблицами базы данных. Например, далее показано, как можно реализовать обычную схему ввода заказов с помощью объектных типов и объектных таблиц.
-- операторы, создающие объектную таблицу CUSTOMERS
CREATE OR REPLACE TYPE sales.customer_type AS OBJECT(