Oracle 文档如下所述:“与 map 方法一样,如果定义了一个 order 方法,则每当需要比较该类型的两个对象时都会自动调用该方法。”
所以我认为它会在使用“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;
但无论 order 是 asc 还是 desc,2 个查询的结果都是相同的。