Теперь мы можем, по крайней мере теоретически, создать пакет (давайте назовем его project_roi), который понимает внутреннюю структуру электронных таблиц Microsoft Excel и знает, как устроены таблицы, отражающие доходность капиталовложений проекта. Одной из функций этого пакета может быть days_to_break__even. (Поскольку мы говорим об объектах, то ее, наверное, следует называть методом.)
CREATE OR REPLACE PACKAGE project_roi AS
FUNCTION days_to_break_even (roi BLOB) return INTEGER/END;
Как говорится в лучших учебниках, реализацию тела функции читателю предлагается выполнить самостоятельно, в качестве упражнения. Если программист обладает достаточными навыками и справится с этой задачей, будет допустим следующий запрос:
SELECT	p.proj_name
,	roi.days_to_break_even(p.roi)
FROM	projects p
WHERE	roi.days_to_break_even(p.roi) < 360;
Этот подход полностью сохраняет инкапсуляцию данных (лицо, формирующее запрос, не обязано знать что-либо о структуре электронной таблицы), но все же вызывает сомнения относительно своей эффективности (и, следовательно, практичности). Единственный возможный способ выполнения этого запроса — полное сканирование таблицы проектов и передача каждого обнаруженного BFILE-локатора в функцию days_to_break_even. Для строк, где предикат WHERE истинен, данную функцию потребуется вычислять дважды, хотя это не составляет какой-то проблемы.
Как мы увидим позже, существуют четко определенные ограничения для структур данных, которые можно смоделировать при помощи системы типов данных OracleS. LOB предоставляют разработчику возможность обрабатывать сложные структуры данных как инкапсулированные объекты, используя код на PL/SQL (или на 3GL) для выделения тех атрибутов этих структур, которые должны быть видимы в SQL-запросах.
Интерфейсы
Прежде чем говорить о системе типов данных OracleS и возможностях, которые она предоставляет разработчикам, необходимо сделать несколько предупреждений относительно механизмов, предусмотренных в OracleS для доступа к этим объектным средствам. Если вы опытный пользователь Oracle, то должны знать, что все в Oracle делается при помощи предложений SQL и без SQL здесь вообще ничего сделать нельзя. За прошедшие годы корпорация Oracle разработала такие дополнения, как опция прямой загрузки утилиты
94	OracleS