使用对像类型

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值