使用对像类型

来源:互联网 发布:单片机编程软件中文版 编辑:程序博客网 时间:2024/06/03 02:18

对象函数
 
  对象函数用于操纵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;
/

 

 

原创粉丝点击