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 RETU
RN VARCHAR2
);
/
因为对象类型规范person_typ4定义了MAP函数getage,所以必须要通过对象类型体实现该函数:
oracle trunc函数的使用方法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;
/
玛丽⽐王明⼩
转⾃:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。