使用对象类型
来源:互联网 发布:程序员接单知乎 编辑:程序博客网 时间:2024/04/30 12:56
<!-- /* Font Definitions */ @font-face{font-family:宋体;panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-alt:SimSun;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:"/@宋体";panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal{mso-style-parent:"";margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;mso-pagination:none;font-size:10.5pt;mso-bidi-font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:宋体;mso-font-kerning:1.0pt;} /* Page Definitions */ @page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section1{size:595.3pt 841.9pt;margin:72.0pt 90.0pt 72.0pt 90.0pt;mso-header-margin:42.55pt;mso-footer-margin:49.6pt;mso-paper-source:0;layout-grid:15.6pt;}div.Section1{page:Section1;} /* List Definitions */ @list l0{mso-list-id:174615601;mso-list-type:hybrid;mso-list-template-ids:-331832914 159668954 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}@list l0:level1{mso-level-tab-stop:18.0pt;mso-level-number-position:left;margin-left:18.0pt;text-indent:-18.0pt;}@list l1{mso-list-id:1033309494;mso-list-type:hybrid;mso-list-template-ids:-1424110 122832736 274911138 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}@list l1:level1{mso-level-tab-stop:18.0pt;mso-level-number-position:left;margin-left:18.0pt;text-indent:-18.0pt;}@list l1:level2{mso-level-tab-stop:39.0pt;mso-level-number-position:left;margin-left:39.0pt;text-indent:-18.0pt;}ol{margin-bottom:0cm;}ul{margin-bottom:0cm;}-->
使用对象类型
一:对象类型的属性。对象类型不能实用的数据类型:
LONG and LONG RAW
ROWID and UROWID
PL/SQL:特有类型
二:对象类型方法
1. 构造方法:用于初始化对象并返回对象实例。
2. MEMBER方法:用于访问对象实例的数据。使用MEMBER方法的时,可以使用内置参数SELF访问当前对象实例。
3. STATIC方法:用于在对象类型上执行全局操作,只能由对象类型调用。
4. MAP方法(可选):将对象实例映射为标量类型数据(NUMBER,VARCHAR2,DATE),然后根据标量类型数据排序对象实例。但最多只能定义一个MAP方法。
5. ORDER方法
只能比较两个对象实例的大小。但最多只能定义一个MAP方法。MAP方法和ORDER方法不能同时定义。
三:建立对象类型。包括对象类型规范,对象类型体。
1. 建立MAP方法
CREATE OR REPLACE TYPE person_typ4 AS OBJECT (
2 name VARCHAR2(10),gender VARCHAR2(2),birthdate DATE,
3 MAP MEMBER FUNCTION getage RETURN VARCHAR2
4 );
5 /
CREATE OR REPLACE TYPE BODY person_typ4 IS
2 MAP MEMBER FUNCTION getage RETURN VARCHAR2
3 IS
4 BEGIN
5 RETURN TRUNC((SYSDATE-birthdate)/365);
6 END;
7 END;
trunc实际上是truncate函数,字面意思是截断。
2. 如果建立ORDER函数
CREATE OR REPLACE TYPE person_typ5 AS OBJECT (
name VARCHAR2(10),gender VARCHAR2(2),birthdate DATE,
ORDER MEMBER FUNCTION compare(p person_typ5) RETURN VARCHAR2
) ;
CREATE OR REPLACE TYPE BODY person_typ5 IS
2 ORDER MEMBER FUNCTION compare(p person_typ5) RETURN INT
3 IS
4 BEGIN
5 CASE
6 WHEN birthdate > p.birthdate THENRETURN 1;
7 WHEN birthdate = p.birthdate THEN RETURN0;
8 WHEN birthdate < p.birthdate THENRETURN -1;
9 END CASE;
10 END;
11 END;
3.建立构造函数
CREATE OR REPLACE TYPE person_type6 AS OBJECT(
name VARCHAR2(10),gender VARCHAR2(2),birthdate DATE,
CONSTRUCTOR FUNCTION person_typ6(name VARCHAR2)
RETURN SELF AS RESULT);
CREATE OR REPLACE TYPE BODY person_typ6 IS
2 CONSTRUCTOR FUNCTION person_typ6(name VARCHAR2)
3 RETURN SELF AS RESULT
4 IS
5 BEGIN
6 self.name:=name;
7 self.gender:='女';
8 self.birthdate:=SYSDATE;
9 return;
10 END;
11 END;
四:使用引用数据
CREATE TABLE employee_tab8(
eno NUMBER(6),person REF person_typ8,
sal NUMBER(6,2),job VARCHAR2(10)
)
1.插入数据
BEGIN
INSERT 1,REF(a),2000,'图书管理员' FROM person_tab8a
WHERE a.name='马丽';
END;
REF(a)返回指向相应数据行的指针。
2. 检索数据
DECLARE
2 v_person person_typ8;
3 BEGIN
4 SELECT DEREF(person) INTO v_personFROM employee_tab8
5 WHERE eno=&no;
6 dbms_output.put_line(v_person.get_info);
7 END;
DEREF(person):取得行对象的相应数据。
3. 更新REF对象列数据
DECLARE
2 v_person person_typ8;
3 BEGIN
4 SELECT DEREF(person) INTO v_person FROM employee_tab8
5 WHERE eno=&no;
6 UPDATE person_tab8 SET address=v_person.address
7 WHERE name=v_person.name;
8 END;
五:对象类型的继承
当使用对象类型继承时,在定义父类型时必须要指定NOT FINAL;因为默认情况下为FINAL 表示该对象类型不能被继承。
CREATE OR REPLACE TYPE person_typ9 AS OBJECT(
name VARCHAR2(10),gender VARCHAR2(2),
birthdate DATE,address VARCHAR2(50),
MEMBER FUNCTION get_info RETURN VARCHAR2
)NOT FINAL;
CREATE OR REPLACE TYPE employee_typ9 UNDER person_typ9(
eno NUMBER(6),sal NUMBER(6,2),job VARCHAR2(10),
MEMBER FUNCTION get_other RETURN VARCHAR2);
六:管理对象类型
1.执行CREATE TYPE命令建立对象类型时,ORACLE 会将对象类型的信息存放到数据字典中。通过查询数据字典视图USER_TYPES.
SELECT type_name,attribute,final FROM user_types;
2. 增加对象类型属性。为对象增加或删除属性时必须要带上CASCADE
ALTER TYPE person_typ1 ADD ATTRIBUTE
Address VARCHAR2(50) CASCADE;
ALTER TYPE person_typ1 DROP ATTRIBUTE birthdate CASCADE;
ALTER TYPE person_typ1
ADD MEMBER FUNCTION get_info RETURN VARCHAR2
CASCADE;
- 使用对象类型
- 使用isInstanceOf()测试对象类型
- 使用stringstream对象简化类型转换
- 使用stringstream对象简化类型转换
- 使用stringstream对象简化类型转换
- 使用stringstream对象简化类型转换
- 使用stringstream对象简化类型转换
- 使用stringstream对象简化类型转换
- 使用stringstream对象简化类型转换
- 使用stringstream对象实现类型转换实例
- 使用stringstream对象简化类型转换
- 《精通Oracle10gPLSQL编程》15、使用对象类型
- 使用stringstream对象简化类型转换
- 使用stringstream对象简化类型转换
- 使用stringstream对象简化类型转换
- javascript使用toString方法判断对象类型
- 使用stringstream对象简化类型转换
- 【C++】使用stringstream对象简化类型转换
- 搭建高性能Web服务器Nginx,10倍于Apache---Nginx+Php(FastCgi模式)
- 13开发触发器
- 14开发动态SQL
- 从学习export命令理解到的Shell环境和变量生存期
- nginx---Nginx/PHP/MySQL双机热备、自动切换方案
- 使用对象类型
- EmEditor 显示匹配的多行的字符
- 访问数据库
- maven入门-http://zhouyaoh.javaeye.com/blog/56961
- WinCE嵌入式开发程序入门
- 2009.02.11
- 小视不得!WinImage打造超强启动盘
- 勇敢面对人生,真诚对待自己
- spring+hibernate中的Result object returned from HibernateCallback isn't a List