Предлагаю Вашему вниманию мои выводы о возможностях использования объектно-ориентированных технологий в программах на PL/SQL 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.