SELECT proj_id
, event_code FROM events WHERE event_date.value >= 'Ol-MAR-98';
Типы также могут включать процедуры-члены и функции-члены. Oracle допускает создание специальных функций-членов, ORDER и MAP, которые позволяют сравнить два экземпляра одного типа (больше или меньше первый из них, чем второй). Описание ORDER и MAP вы найдете в следующих разделах этой главы, но здесь хочется отметить, что возможность выполнять сравнение двух АТД никак не упрощает синтаксис сравнения АТД с литералом. Вот альтернативная форма нашего предыдущего примера:
SELECT proj_id
, event_code FROM evets WHERE event_date >= date_only('Ol-MAR-98');
Предупреждение:
Хотя в Oracle и есть предложение CREATE OR REPLACE TYPE, существует серьезное ограничение, о котором вы должны узнать до того, как зайдете слишком далеко в разработке и реализации таблиц, которые используют АТД. Нельзя вообще изменять определение типа, который в текущий момент используется (т.е. на который имеется ссылка в определении таблицы или другого типа). В конечном счете, программные продукты, управляющие схемами баз данных (например, PATROL DB-Alter for Oracle от ВМС), будут формировать задания, необходимые для имитации изменений в определениях TYPE, и эти задания будут выполнять все необходимые операции разгрузки, удаления, восстановления и перезагрузки так же, как они делают это сейчас при изменении традиционных таблиц. Пока же администратор, который управляет базой данных, использующей АТД, может полагаться при изменении определения типа только на себя.
Методы
До сих пор в наших примерах мы демонстрировали только те типы, которые определяют хранение данных. Однако типы могут содержать и исполняемый код в форме методов, которые могут быть процедурами-членами и функциями-членами. Они работают в контексте конкретного экземпляра типа и используют значения данных, присвоенные атрибутам этого типа. Эти методы можно использовать для любого вида обработки, который вы хотите ассоциировать с этим типом. В приведенном ниже примере тип staff_assignment_o расширен и имеет функцию-член cost:
CREATE OR REPLACE TYPE staff_assignment_o AS OBJECT ( staff__id   NUMBER , start_on   DATE , end_on     DATE , recover at NUMBER
102	Oracle 8