Для начала некоторые стандартные функции Oracle используют типы, например XMLDB и Spatial (которые включают объявление столбцов типов данных Nested Table).
Кроме того, многие разработчики PL / SQL постоянно используют типы для объявления коллекций PL / SQL или конвейерных функций.
Но я согласен, что немногие места широко используют типы и создают API-интерфейсы PL / SQL.из них.Для этого есть несколько причин.
- Oracle реализовал Объекты очень медленно.Хотя они были представлены в версии 8.0, только в 9.2 они полностью поддерживали Inheritance, Polymorphism и определяемые пользователем конструкторы.Правильное объектно-ориентированное программирование невозможно без этих функций.Мы не получили
SUPER()
до версии 11g.Даже сейчас отсутствуют функции, особенно частные объявления в TYPE BODY. - Синтаксис часто неуклюжий или разочаровывающий.Документация не помогает.
- Большинство людей, работающих с Oracle, обычно приходят из реляционной / процедурной школы программирования.Это означает, что они не понимают ООП или не понимают, где это может быть полезно при программировании баз данных.Даже когда люди приходят с хорошей идеей, им трудно или невозможно реализовать их с использованием синтаксиса Oracle.
Последний пункт является ключевым.Мы можем изучать новый синтаксис, мы можем убедить Oracle завершить набор функций, но это имеет смысл, только если мы сможем придумать использование для типов.Это означает, что нам нужны проблемы, которые можно решить с помощью наследования и полиморфизма.
Я работал над одной системой, которая широко использовала типы.Это была система хранения данных, и подсистема загрузки данных была построена из типов.Основное обоснование было простым:
- нам нужно применять один и тот же шаблон бизнес-правил для каждой загружаемой таблицы, поэтому процесс является общим;
- для каждой таблицы есть свой прогноз, поэтомуоператоры SQL уникальны для каждого из них.
Реализация типа чистая: общий процесс определен в типе;реализация для каждой таблицы определена в типе, который наследуется от этого общего типа.Определенные типы могут быть сгенерированы из метаданных.Я выступал с этой темой в UKOUG несколько лет назад и более подробно об этом написал в своем блоге. Узнайте больше.
Кстати, теория отношений включает в себяконцепция доменов, которые являются определяемыми пользователем типами данных, включая ограничения и т. д. Никакая разновидность СУБД фактически не поддерживает домены, но реализация типа Oracle, безусловно, является шагом вперед.