Объектно-реляционные функции 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
  • Невозможно описать данные объекта константами. На этот случай, вроде бы, тоже есть какой-то трюк.
Наиболее неприятным мне представляется невозможность создания защищенных членов. В последней версии 11g, эта возможность не появилась.

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

Петрелевич Сергей
petrelevich@yandex.ru

Метки: PL/SQL  

Комментарии.

Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.