Объектно-реляционные функции Oracle
Статьи про Oracle -> Программирование
Объектно-реляционные функции Oracle
Статья написана на основе официальной документации фирмы Oracle
Oracle® Database Application Developer's Guide - Object-Relational Features
10g Release 2 (10.2)
Part Number B14260-01
v:1.0 2008.02.21
В этой статье я излагаю результаты своего изучения объектно-ориентированного программирования (ООП) в Oracle.
В разработке приложений для Oracle мне хотелось бы использовать технологии ООП. Причем использовать их в PL/SQL, чтобы расширить штатные возможности этого языка.
В Oracle есть возможность создавать объектные типы (OBJECT). Это пользовательский тип данных, который включает в себя данные и функции для работы с этими данными. Кроме функций общего назначения объект может содержать некоторые "специфические" функции: конструктор - функция инициализации экземпляра объекта, функция сортировки экземпляров и т.д.
На основе объекта - пользовательского типа данных можно создать таблицу так же как и на основе встроенных типов (number, varchar2 и т.д.). Теоретически, объектная таблица может заменить связку обычных реляционных, а это может существенно упростить структуру базы и манипуляции с данными. Однако известный эксперт Oracle Том Кайт не рекомендует использовать эту возможность в 8-й версии СУБД. Дело в том, что Oracle представляет объектную таблицу как обычную реляционную со вложенными таблицами.
- Такая реализация приводит к следующим недостаткам:
- Невозможно посмотреть данные стандартными средствами, например SQL Plus.
- Большие накладные расходы на хранение и обработку вложенных таблиц, это приводит к снижению быстродействия.
- Различные непонятные "эффекты" вложенных таблиц.
В более новых версиях (9i, 10g и 11g) эффективность объектных таблиц следует проверить, не исключено, что ситуация принципиально улучшилась. Хорошей новостью является тот факт, что начиная с 9i в PL/SQL появилась возможность конструировать типы данных с вложенными массивами, причем уровень вложенности массивов в массивы не ограничен.
Чтобы компенсировать недостатки объектных таблиц, но использовать возможности объектных типов, Кайт предлагает хранить данные в реляционных таблицах, но обращаться к ним через объектные представления.
Начиная с версии 9i в Oracle появилась возможность наследования типов. Фактически это реализация известного механизма ООП. Этот факт может существенно повысить привлекательность объектных типов.
Важно отметить, что с объектами можно работать и непосредственно в SQL запросах, без применения конструкций PL/SQL.
Все эти возможности делают объекты весьма привлекательным средством.
- Однако есть ряд существенных недостатков.
- У объект не может быть защищенных членов. Все данные, процедуры и функции являются общедоступными
- В объявлении объекта нельзя использовать типы данных, описанные в пакеджах PL/SQL.
- Не очевидный механизм вызова конструктора объекта-родителя.
На этот случай есть обходной маневр, описанный здесь: http://www.dsvolk.ru/oracle/dvp/igorm - Невозможно описать данные объекта константами. На этот случай, вроде бы, тоже есть какой-то трюк.
Видимо из-за этих недостатков объекты и объектные таблицы имеют ограниченные возможности применения, на основе их не возможно строить полноценные объектно-ориентированные приложения на PL/SQL.
Петрелевич Сергей
petrelevich@yandex.ru
Метки: PL/SQL
Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.