Oracle使用对象类型5(MAP方法的对象类型)

.... ..真的好攰好攰好攰...快坚持不住了..  谁来救救我!

 

 

MAP方法用于将对象实例映射为标量数值(number,date,varchar2等)。

对于相同对象类型不同对象实例来说,因为他们的数据类型时复合数据类型,所以对象实例之间不能直接进行比较。

为了排序多个对象实例的数据,可以在建立对象类型时定义MAP方法。

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

下面以建立和使用对象类型person_typ4为例:

对象类型person_typ4将用于描述人员信息,该对象类型包含有姓名,性别,出生日期三个属性,另外还包含有用于取得人员年龄的一个MAP方法:

 

CREATE OR REPLACE TYPE person_type AS OBJECT(

name VARCHAR2(10),gender VARCHAR2(2),birthdate DATE,MAP MEMBER FUNCTION getage RETURN VARCHAR2

);

/

 

因为对象类型规范person_typ4定义了MAP函数getage,所以必须要通过对象类型体实现该函数:

 

CREATE OR REPLACE TYPE BODY person_typ4 IS

MAP MEMBER FUNCTION getage RETURN VARCHAR2

IS

BEGIN

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

END;

END;

/

当建立了对象类型规范和对象类型体之后,就可以使用该对象类型及其方法。基于对象类型person_typ4建立对象表employee_tab4并为其插入数据:

 

CREATE TABLE employee_tab4(

eno NUMBER(6),person person_typ4,

sal NUMBER(6,2),job VARCHAR2(10)

);

INSERT INTO employee_tab4(eno,sal,job,person)

VALUES(1,1500,'图书管理员',person_typ4('玛丽','女','11-1月-76'));

INSERT INTO employee_tab4(eno,sal,job,person)

VALUES(2,2000,'高级焊工',person_typ4('王明','男','11-5月-75'));

INSERT INTO employee_tab4(eno,sal,job,person)

VALUES(3,2500,'高级工程师'person_typ4('黎明','男','11-5月-70'));

 

 

在执行了以上语句之后,就会建立对象表employee_tab4,并为其插入三条数据。因为在建立对象类型时定义了MAP方法,所以可以在PL/SQL使用MAP方法排序对象实例的数据。

下面以比较对象表employee_tab4的前两条数据:

 

DECLARE

TYPE person_table_type IS TABLE OF person_typ4;

person_table person_table_type;

v_temp VARCHAR2(100);

BEGIN

SELECT person BULK COLLECT INTO person_table

FROM employee_tab4;

IF person_table(1).getage()>person_table(2).getage() THEN

v_temp:=person_table(1).name||'比'||person_table(2).name||'大';

ELSE

v_temp:=person_table(1).name||'比'||person_table(2).name||'小';

END IF;

dbms_output.put_line(v_temp);

END;

/

玛丽比王明小

 

转自:http://blog.sina.com.cn/s/blog_7180600201010a67.html

posted @ 2018-04-26 22:45  N神3  阅读(852)  评论(0编辑  收藏  举报