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

Insert into sales.Orders

Values (sales.Order_Type (1,custoid,sysdate,null,

sales.item_List(sales.item_Type(1,partoid,50))));

EXCEPTION

WHEN NO_DATA_FOUND THEN

raise_application_error(-20000,'No data found');

END;

Может показаться, что описание операций, необходимых для ввода данных в объектные таблицы, не столь понятно, как соответствующий реляционный синтаксис SQL. Но не забывайте и о том, что для работы с чем-то новым обычно всегда требуется некоторый опыт.

Удобство использования объектных таблиц, идентификаторов объектов и объектных ссылок становится очевидным при необходи­мости получить связанную информацию объектных таблиц. Вместо создания сложных запросов, как это требуется в реляционных системах, можно воспользоваться расширенной формой уточняющей записи через точку для тех атрибутов объектных таблиц, которые являются объектными ссылками. Чтобы упростить SQL-программы, в Oracleпредусмотрен автоматический поиск объектных ссылок. Например, следующий объектный запрос возвращает связанную информацию объектных таблицORDERSиCUSTOMERS.

SELECT о.id, o.customer.company_name

FROM sales.orders о;

Id customer.Company_name

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

1 Oracle Corporation

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

SELECT о.id, o.company_name

FROM sales.orders o, sales.customers с

WHERE o.cust_id = c.id;

Вернемся к нашей системе, состоящей из объектных таблиц, и рассмотрим запрос, считывающий информацию из вложенной таблицы ITEMSи связанной с ней объектной таблицыPARTS:

SELECT o.item_id, o.part.description, o.quantity

FROM THE(SELECT line_items FROM sales.orders

WHERE id = 1) o;

Item_id part.Description quantity

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

1Pentium 200 cpu 50

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

Соблюдение взаимосвязей

В предыдущих примерах было показано, как использовать объектные типы для создания объектов баз данных, например таблиц и хранимых процедур. При создании объектов необходимо учитывать, что при этом строится некоторое дерево взаимосвязей (dependencies),возникающих между объектами и объектными типами базы данных, и это дерево должно оставаться невредимым.Oracleконтролирует соблюдение взаимосвязей и не дает пользователям их нарушать. В любое время можно обратиться с запросом к словарю данных и вывести на экран взаимосвязи, существующие между объектами. Например, следующий запрос, который выполняется пользователем, присоединен­ным какSALES, показывает взаимосвязи, существующие между таблицейSALES.CUSTOMERSи типамиPUB.ADDRESS_TYPEиSALES.CUSTOMER_TYPE:

SELECT * FROM user_dependencies

ORDER BY name, type;

NAME TYPE REFERENCED_OWNER REFERENCED_NAME REFERENCED_TYPE

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

CUSTOMERS TABLE PUB ADDRESS_TYPE TYPE

CUSTOMERS TABLE SALES CUSTOMER_TYPE TYPE

Взаимосвязи не нарушаются, когда ничего не нужно изменять. Однако на практике изменения неизбежны, и в этом случае взаимо­связи, существующие между объектами, могут доставить множество хлопот. Предположим, нужно расширить тип CUSTOMER_TYPEс помощью нового атрибутаPHOTO. ТаблицаCUSTOMERSзависит отCUSTOMER_TYPE, и поэтому нельзя изменить описаниеCUSTOMER_ TYPE, если вначале не удалить таблицуCUSTOMERS. В заключение хочется посоветовать тщательнее проектировать объектные типы для баз данных, чтобы сразу принимать правильное решение. Затем остается только надеяться, что ничего не изменится после ввода системы в эксплуатацию.