, MEMBER FUNCTION cost RETURN NUMBER ) ; CREATE OR REPLACE TYPE BODY staff_ assignment_o IS
MEMBER FUNCTION cost RETURN NUMBER IS
BEGIN
-- игнорирование проблемы нерабочих дней;
-- может быть, расширить поиск в таблице рабочих дней
-- и в таблице отсутствия персонала;
RETURN ((end_on - start_on) * recover_at); END; END;
Мы уже видели, что у каждого типа есть свой метод-конструктор, который имеет то же имя, что и тип, и не может быть переопределен. Имеется еще два специальных метода, MAP и ORDER, и для каждого типа может быть определен только один из них. В зависимости от того, какой из этих двух методов определен, Oracle использует его для сравнения двух экземпляров соответствующего типа. Рассмотрим эти методы более детально и предположим, что мы решили упорядочить наши назначения сотрудников по дате назначения.
Функция MAP
Функция MAP возвращает число, с помощью которого можно сортировать экземпляры объектного типа. Применительно к нашему примеру мы можем решить, что приложение всегда будет содержать даты назначения в интервале с 1 января 1996 г. по 1 января 2010 г. Длительность этого периода — 14 лет, или менее 10000 дней. Следовательно, если мы возьмем staff_id, умножим его на 10000, а затем прибавим количество дней между 1 января 1996 г. и датой назначения, то получим число, которое можно использовать для сравнения.
MAP MEMBER FUNCTION MP RETURN NUMBER IS BEGIN
RETURN (  (staff_id * 10000)
+ (start_on.value - to_date
('Ol-JAN-1996', 'dd-MON-yyyy ')); END;
Функции MAP иногда бывают несколько искусственными, как в данном примере, но часто более эффективными, чем функции ORDER. Для операции сортировки функцию MAP нужно вызывать только один раз для каждого экземпляра типа.
Функция ORDER
Функция ORDER принимает в качестве аргумента один экземпляр типа и сравнивает его с текущим экземпляром. Функция возвращает отрицательное целое число, если текущий экземпляр меньше аргумента, нуль, если они равны, и положительное целое число, если текущий экземпляр больше аргумента.
5. Объекты	103