Программирование >>  Oracle 

1 ... 335 336 337 [ 338 ] 339 340 341 ... 469


1432

Глава 20

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

scott@TKY816> create or replace type dept budget type

2 as object

3 (fy date,

4 amount number

Type created.

scott8TKYTE816> create or replace type dept budget tab type

2 as table of dept budget type

Type created.

scott@TKYTE816> create or replace type dept type

2 as object

3 (deptno number(2) ,

4 dname varchar2(14) ,

5 loc varchar2(13) ,

6 emps emp tab type,

7 budget dept budget tab type

Type created.

scott6TKYTE816> create or replace view dept or

10 11 12 13 14 15 16 17

of dept type

with object identifier(deptno) as

select deptno, dname, loc,

cast

cast

from dept

(multiset (

select empno, ename, job, mgr, hiredate, from emp where emp.deptno = dept.deptno) as emp tab type) emps, (multiset (

select fy, amount from dept fy budget where dept fy budget.deptno = dept.deptno) as dept budget tab type) budget

sal, conm

View created.

Теперь учтите, что представленные выше действия выполняются один раз, и все сложности от приложения скрыты. В приложении можно просто написать:

scott@TKYTE816> select * from dept or where deptno = 10 2 /



Использование объектно-реляционн1х средств 1433 DEPTNO DNAME LOC EMPS(EMPNO, ENAME, J BUDGET(FY, AMOUNT)

10 Accounting NEW YORK EMP TAB TYPE(EMP TYP DEPT BUDGET TAB TYPE

E(7782 , Clark, (DEPT BUDGET TYPE(0

MANAGER, 7839, l-JAN-99, 500), 09-JUN-81, 2450, DEPT BUDGET TYPE(01

NULL), -JAN-00, 750),

EMP TYPE(7 83 9, DEPT BUDGET TYPE(01

King, PRESIDENT, -JAN-01, 1000))

NULL, 17-NOV-81,

5000, NULL),

EMP TYPE(1234, Tom, Boss, NULL, 25-MAR-01, 1000,

500) )

1 row selected.

Снова мы получаем одну строку, один экземпляр объекта, представляющего данные в нужном виде. Это весьма удобно. Сложность базовой физической модели скрыта, и легко понять, как создать графический интерфейс для представления этих данных пользователю. При программировании на языке Java (с помощью интерфейса JDBC), Visual Basic (с помощью объектов OO4O - Oracle Objects for Ole), PL/SQL, использовании библиотеки OCI (Oracle Call interface) и прекомпилятора Pro*C объектно-реляционные расширения легко применить. Использовать реляционную модель становится все труднее по мере добавления сложных отношений один ко многим. При использовании объектно-реляционной модели все несколько проще. Придется, конечно, изменить триггеры INSTEAD OF для поддержки изменения базовых реляционных данных, так что приведенный пример неполон, но идею вы, надеюсь, уловили.

Резюме

В этой главе мы изучили основные способы использования объектных типов и расширений сервера Oracle. Из четырех возможных способов мы детально рассмотрели три.

Мы рассмотрели использование объектных типов для расширения стандартного набора типов системы. С помощью нового типа ADDRESS TYPE мы смогли не только задать общую систему именования и использования адресов, но и обеспечить специализированные методы и средства работы с ними.

Мы также рассмотрели использование объектно-реляционных расширений для естественного развития возможностей языка PL/SQL. Мы взяли стандартный пакет и реализовали для него интерфейс на уровне объектного типа. Это позволяет защититься от изменений в реализации стандартного пакета, а также обеспечивает более объектно-ориентированный стиль программирования на PL/SQL, подобный использованию классов в языках С+ + или Java. Кроме того, б1ло показано, как, используя наборы, можно выбирать данные из PL/SQL-функции с помощью оператора SELECT. Одной этой возможности достаточно, чтобы оправдать использование объектно-реляционных расширений.



1434

Глава 20

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

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



1 ... 335 336 337 [ 338 ] 339 340 341 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика