对象函数
对象函数用于操纵REF对象。REF实际是指向对象实例的指针,也称为参照对象。
Deref (expr):用于返回参照对象引用的对象实例。
Make_Ref(object_table | object_view,key)用于基于对象视图或者表的行数据生成REF。
Ref (expr):用于返回对象行所对应的REF值。
Reftohex(expr)用于将REF值转变为十六进制字符串。
Value (expr):用于返回行对象所对应的对象实例数据。
定义对像类型方法
构造方法 从9I后除了使用默认的构造方法外,还可以自定义构造方法 Contructor Function (用9.0.0 不支持自定义构造)
Member方法 可以使用内置参数Self 只能由对象实例调用
Static方法 只能由对象类型调用
Map 方法 按规则排序对象实例的数据。对象类型最多能有一个MAP方法。
Order 方法 用于比较对象实例。不能与Map方法同时定义。最多能有一个。
eg:
定义:
create or replace type employee_type as object(eno number(6),name varchar2(10),salary number(6,2),
job varchar2(10),dno number(2),
constructor function employee_type(eno number,name varchar2) return self as result,
member procedure change_sal(new_sal number),static function get_time return varchar2,
map member function sal_sort return number
);
/
create or replace type body employee_type as
constructor function employee_type(eno number,name varchar2) return self as result
is
begin
self.eno:=eno;
self.name:=name;
return;
end;
member procedure change_sal(new_sal number) as
begin
salary:=new_sal;
end;
static function get_time return varchar2 as
begin
return to_char(sysdate,'YYYY-MM-DD HH24:MI:SS');
end;
map member function sal_sort return number as
begin
return salary;
end;
end;
/
调用
declare type emp_table_type is table of employee_type index by binary_integer;
emp_table emp_table_type;
index_max int; index_min int;
temp_max int:=0; temp_min int :=999999;
begin
emp_table(1) := employee_type(1,'scott',3500,'clerk',10);
emp_table(2) := employee_type(2,'SMITH',3500,'manger',10);
emp_table(3) := employee_type(3,'BLAKE',3500,'clerk',10);
emp_table(1).change_sal(&sal1);
emp_table(2).change_sal(&sal2);
emp_table(3).change_sal(&sal3);
for i in 1..emp_table.count loop
dbms_output.put_line('姓名:'|| emp_table(i).name ||' 工资:'|| emp_table(i).salary);
if emp_table(i).sal_sort>temp_max then
temp_max:=emp_table(i).sal_sort; index_max:=i;
end if;
if emp_table(i).sal_sort< temp_min then
temp_min:=emp_table(i).sal_sort; index_min:=i;
end if;
end loop;
dbms_output.put_line('工资最高的员工:'|| emp_table(index_max).name);
dbms_output.put_line('工资最低的员工:'|| emp_table(index_min).name);
end;
/