За начало някои стандартни функции на Oracle използват типове, например XMLDB и Spatial (което включва деклариране на колони от типове данни на вложени таблици).
Освен това много PL/SQL разработчици използват типове през цялото време за деклариране на PL/SQL колекции или конвейерни функции.
Но съм съгласен, че малко места използват типовете широко и изграждат PL/SQL API от тях. Има няколко причини за това.
- Oracle внедри обектите много бавно. Въпреки че бяха въведени във версия 8.0, едва във версия 9.2 те поддържаха напълно наследяване, полиморфизъм и дефинирани от потребителя конструктори. Правилното обектно-ориентирано програмиране е невъзможно без тези функции. Не получихме
SUPER()
до версия 11g. Дори сега има липсващи функции, най-вече личните декларации в TYPE BODY. - Синтаксисът често е тромав или разочароващо неясен. Документацията не помага.
- Повечето хора, работещи с Oracle, са склонни да идват от релационното/процедурното училище по програмиране. Това означава, че те са склонни да не разбират ООП или не успяват да разберат къде може да бъде полезно при програмирането на бази данни. Дори когато хората излязат с добра идея, те намират, че е трудно или невъзможно да се приложат с помощта на синтаксиса на Oracle.
Последната точка е ключовата. Можем да научим нов синтаксис, можем да убедим Oracle да завърши набора от функции, но си струва само ако можем да измислим употреба за типове. Това означава, че имаме нужда от проблеми, които могат да бъдат разрешени с помощта на наследяване и полиморфизъм.
Работил съм върху една система, която използва широко типове. Това беше система за съхранение на данни и подсистемата за зареждане на данни беше изградена от типове. Основната обосновка беше проста:
- трябва да приложим един и същ шаблон на бизнес правило за всяка таблица, която зареждаме, така че процесът е общ;
- всяка таблица има своя собствена проекция, така че SQL операторите са уникални за всяка една.
Реализацията на Type е чиста:генеричният процес е дефиниран в Type; изпълнението за всяка таблица е дефинирано в тип, който наследява от този общ тип. Конкретните типове могат да бъдат генерирани от метаданни. Представих тази тема в UKOUG преди няколко години и съм я написал по-подробно в моя блог.Научете повече.
Между другото, релационната теория включва концепцията за домейни, които са дефинирани от потребителя типове данни, включително ограничения и т.н. Нито един вариант на RDBMS всъщност не поддържа домейни, но внедряването на типове на Oracle определено е стъпка по пътя.