Документ Oracle говорит следующее: «Как и в случае с методами отображения, метод порядка, если он определен, вызывается автоматически всякий раз, когда необходимо сравнить два объекта этого типа».
Так что я предполагаю, что он будет сортироваться при использовании clausule 'order by'.
Допустим, у меня есть следующий объект:
create or replace type height as object
(
val number,
constructor function height return self as result,
constructor function height (val number) return self as result,
order member function compare (other height) RETURN INTEGER
);
и его реализация тела:
create or replace type body height is
constructor function height return self as result is
begin
self.val := null;
end;
constructor function height (val number) return self as result is
begin
self.val := val;
return;
end;
order member function compare (other height) return integer is
begin
if self.val > self.val then return 1;
elsif self.val < self.val then return -1;
else return 0;
end if;
end;
end;
Тогда мой стол выглядит так:
CREATE TABLE people (
name varchar2(50),
height height
);
И некоторые записи ...
insert into people values ('Foo', height(150));
insert into people values ('Bar', height(130));
insert into people valueS ('Baz', height(180));
Тогда я хочу отсортировать это:
select p.height.val from people p order by height ASC;
select p.height.val from people p order by height DESC;
Но результат одинаков для 2 запросов, независимо от того, является ли порядок asc или desc.