|
Программирование >> Oracle
Использование объектно-реляционных средств Начиная с версии Oracle 8, в базах данных сервера Oracle могут использоваться объектно-реляционные средства. В1ходя за пределы стандартных скалярных типов NUMBER, DATE и строк символов, объектно-реляционные средства Oracle позволяют расширить набор поддерживаемых типов данных. Можно создавать собственные типы данных, включающие: атрибуты, каждый из котор1х может быть скалярной величиной или набором (массивом) других объектных/скалярных типов; методы для работы с данными этого типа; статические методы; необязательный метод сравнения, используемый для сортировки и сравнения данных. Затем этот новый тип можно использовать для создания таблиц, столбцов таблиц, представлений или для расширения возможностей языков SQL и PL/SQL. Вновь созданный пользовательский тип данных можно использовать точно так же, как и базовый тип данн1х DATE. В этой главе я продемонстрирую, как использовать объектно-реляционные средства сервера Oracle. Будет также показано, как их не следует использовать. Я буду описывать компоненты этой технологии последовательно. Однако эту главу нельзя считать полным обзором всех возможностей объектно-реляционных средств Oracle. Этому посвящено 200-страничное руководство OracleApplication Developers Guide-Object-Relational Features. Цель данной главы - показать, когда и как использовать эти возможности. 1388 Глава 20 Объектно-реляционные средства Oracle можно использовать во многих языках. При программировании на Java - через интерфейс JDBC, на Visual Basic - с помощью компонентов 0 040 (Oracle Objects for Ole). При программировании с помощью библиотеки OCI (Oracle Call interface), языка PL/SQL и прекомпилятора Pro*C очень легко использовать соответствующие функциональные возможности. Корпорация Oracle предоставляет различные инструментальные средства, упрощающие использование объектно-реляционных возможностей сервера в этих языках. Например, при программировании на Java/JDBC можно использовать Oracle JPublisher - утилиту, автоматически генерирующую Java-классы, представляющие объектные типы базы данных, наборы и PL/SQL-пакеты (это генератор кода, который позволяет сопоставлять сложные типы SQL типам языка Java). Библиотека OCI поддерживает на стороне клиента встроенный кэш объектов, используемый для эффективного управления и обработки объектов. Прекомпилятор Pro*C включает средство OTT (Object Type Translator - транслятор объектных типов) для генерации структур (struct) языка С/С+ + , соответствующих объектным типам. Я не буду касаться использования этих языков и средств - все это детально описано в документации сервера Oracle. Все внимание будет сосредоточено на создании объектных типов в базе данных. В каких случаях используются объектно-реляционные средства Я использую объектно-реляционные средства сервера Oracle преимущественно для естественного расширения возможностей языка PL/SQL. Объектный тип - прекрасный способ добавить в PL/SQL новые функциональные возможности аналогично тому, как классы позволяют сделать это в С++ или Java. В следующем разделе мы рассмотрим соответствующий пример. Объектные типы можно также использовать для стандартизации. Я могу создать новый тип, скажем, ADDRESS TYPE, который инкапсулирует определение адреса или отдельных компонентов, из которых состоит адрес. Можно даже добавить служебные функции (методы) для этого типа, которые, например, возвращают адрес в формате, подходящем для распечатки на почтовых наклейках. Теперь при создании таблицы, в которой должны содержаться данные об адресе, можно просто указать столбец типа ADDRESS TYPE. Атрибуты адреса при этом будут добавлены в таблицу автоматически. Пример такого использования тоже будет рассмотрен. Объектные типы можно использовать для объектно-реляционного представления чисто реляционных, по сути, данных. Т.е. можно взять пару таблиц EMP/DEPT и построить объектно-реляционное их представление, в котором каждая строка таблицы DEPT будет содержать набор объектов ЕМР. Не соединяя таблицы ЕМР и DEPT, я смогу обратиться к объектному представлению DEPT и получить информацию из таблиц DEPT и ЕМР в одной строке. В следующем разделе мы рассмотрим и этот пример. Объектные типы можно также использовать для создания объектных таблиц. Преимущества и недостатки объектных таблиц рассматривались в главе 6. Объектные таблицы содержат множество скрытых столбцов; при использовании этих таблиц возникают побочные эффекты, и происходят различные чудеса . Кроме того, обычно (для Использование объектно-реляционных средств 1389 множества различных целей) необходимо строго реляционное представление данных (в частности, для утилит и средств создания отчетов, которые не понимают объектные тип1). Именно поэтому объектные таблицы я стараюсь не использовать. Я использую объектные представления реляционных данных, что в конечном итоге дает те же возможности, что и объектные таблицы. Однако при этом я контролирую все аспекты физического хранения данных. Поэтому тему объектных таблиц я здесь подробно рассматривать не буду. Как работают объектно-реляционные средства В этом разделе мы рассмотрим использование объектно-реляционных средств Oracle для решения следующих задач: расширение набора стандартных типов данных в системе; естественное расширение возможностей языка PL/SQL; создание объектно-реляционных представлений реляционных, по сути, данных. Добавление новых типов данных в систему Начнем с простого: типа данных ADDRESS TYPE. Рассмотрим синтаксис соответствующих конструкций, их возможности, побочные эффекты, с которыми можно столкнуться, и т.п. Для начала создадим простой тип: tkyte@TKYTE816>create or replace type Address Type 2 as object 3 (street addrl varchar2(25) , 4 street addr2 varchar2(2 5) , 5 city varchar2(30) , 6 state varchar2(2), 7 zip code number Type created. Это простейшая разновидность оператора CREATE TYPE. По ходу работы над примером мы добавим в него дополнительные конструкции. Этот тип состоит только из заданных скалярных типов, не имеет методов, специфических функций сравнения - ничего выдающегося . Зато его можно сразу же использовать в таблицах и в PL/SQL-коде: tkyte@TKYTE816> create table people 2 (name varchar2(10) , 3 home address address type, 4 work address address type
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |