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;
/
玛丽比王明小
感谢您的阅读,您的支持是我写博客动力。