oracle面向对象技术中的map和order方法有何不同?

MAP方法,在网上查了些资料,大概的知道它的用法,但是order怎么用? 我觉得这里肯定说的不会是order by  因为这两个东西完全不是同一类型的东西!

order真的存在这个东西吗?我是新手,求教求教!

下面是转载MAP方法的资料:
转载地址:http://hi.baidu.com/no20win/item/7a97825a4e2ef0a3acc857af


MAP方法

MAP
方法用于将对象实例映射为标量数值(NUMBERDATE,VARCHAR2);对于相同对象类型不同对象实例来说,因为他们的数据类型是复合数据类型,所以对象实例之间不能直接进行比较。为了排序多个对象实例的数据,可以在建立对象类型时定义MAP方法。

*
注意:
一个对象类型最多只能定义一个MAP方法,并且MAP方法和ORDER方法不能同时使用。

1
建立对象类型规范和对象类型体test_map_method_obtype

/**

建立对象类型规范和对象类型体test_map_method_obtype

MAP方法主要用于获取雇员的年龄

**/

--建立对象类型规范test_map_method_obtype

CREATE OR REPLACE TYPE test_map_method_obtype AS OBJECT(

  name      VARCHAR2(30),

  gender    VARCHAR2(2),

  birthdate DATE,

  MAP MEMBERFUNCTION get_age_fnc RETURN NUMBER 

);

/

--建立对象类型体test_map_method_obtype

CREATE OR REPLACE TYPE BODY test_map_method_obtype AS

  MAP MEMBERFUNCTION get_age_fnc RETURN NUMBER IS

  BEGIN

    RETURN TRUNC((SYSDATE-birthdate)/365);

  END get_age_fnc;

END;

/

2建立对象表test_map_method并追加数据

/**

基于对象类型test_map_method_obtype

建立对象表test_map_method并为其插入数据

**/

--建立对象表test_map_method

DROP TABLE test_map_method PURGE;

CREATE TABLE test_map_method(

  empno NUMBER(2) ,

  employee test_map_method_obtype NOT NULL,

  job VARCHAR2(20) NOT NULL,

  sal NUMBER(7,2)

);

--向对象表test_map_method插入数据

INSERT INTO test_map_method

VALUES(10,test_map_method_obtype('张三', '', 

TO_DATE('1990-02-10', 'yyyy-mm-dd')),'CLERK',2000);

 

INSERT INTO test_map_method

VALUES(20,test_map_method_obtype('李四', '', 

TO_DATE('1989-08-01', 'yyyy-mm-dd')),'SALESMAN',3000);

 

INSERT INTO test_map_method

VALUES(30,test_map_method_obtype('王丽', '', 

TO_DATE('1988-06-09', 'yyyy-mm-dd')),'MANAGER',6000);

COMMIT;


3
调用MAP方法进行雇员年龄的比较

DECLARE

  --定义嵌套表test_tbtype

  TYPE test_tbtype IS TABLE OF test_map_method_obtype;

  --声明嵌套表类型变量t_person

  t_person test_tbtype;

BEGIN

  --批处理数据,将对象表中的对象列employee

  --的数据存储在嵌套表t_person

  SELECT employee 

  BULK COLLECT INTO t_person 

  FROM test_map_method;

 

  --比较年龄大小

  IF t_person(1).get_age_fnc() >t_person(2).get_age_fnc() THEN

    DBMS_OUTPUT.put_line(t_person(1).name||''||t_person(2).name||'');

  ELSE

    DBMS_OUTPUT.put_line(t_person(1).name||''||t_person(2).name||'');

  END IF;

    

END;

/

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28371090/viewspace-755380/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28371090/viewspace-755380/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值