PL/SQL入门--复杂对象类型
2012-08-02 21:54
429 查看
12.建立和使用复杂对象类型
复杂对象类型是指与其他对象类型具有关联关系的对象类型
1.对象类型嵌套
建立对象类型
建立对象类型体实现该方法:
建立对象类型(嵌套):
建立对象类型体:
建立操纵对象表:
操纵对象表
在PLS/SQL块中为对象表插入数据
在PL/SQL块中更新对象列数据
在PL/SQL块中检索对象列数据
在PL/SQL块中删除对象表数据
2.参照对象类型
指在建立对象表时使用REF定义表列,REF实际是指向行对象数据的逻辑指针
通过使用REF定义表列,可以使得一个对象表引用另一个对象表(行对象)的数据,从而节省磁盘空间和内存空间
建立对象类型:
建立对象类型体:
建立行对象并追加数据
对象表引用对象表(REF)
建立对象表(引用表)
操纵对象表
为对象表出入数据
引用行对象表时,需要使用函数REF(),其返回值实际是指向相应数据行的指针
检索REF对象列数据
为了取得行对象的相应数据,必须要使用DEREF函数取得REF列所对应的实际数据
更新REF对象列数据
要修改其列所引用的数据,就必须修改相应的行对象
删除对象表数据
3.对象类型继承
指一个对象类型继承另一个对象类型,并且对象类型继承由父类型和子类型组成
父类型用于定义不同对象类型的公用属性和方法,而子类型不仅继承了父类型的公用属性和方法,而且还可具有自己的私有属性和方法.
使用对象类型继承时,在定义父类型时必须要指定NOT FINAL 选项,如果不指定该选项,默认为FINAL,表示该对象类型不能被继承
建立父对象类型:
建立对象类型体:
建立子对象类型(继承):
建立对象类型体(私有方法):
建立对象表并插入数据
使用对象方法输出数据
4.维护对象类型
显示对象类型信息 执行CREATE TYPE 命令建立对象类型时,ORACLE会将对象类型的信息存放到数据字典中(USER_TYPES)
增加和删除对象类型属性
如果已经基于对象类型建立了对象类型或对象表,那么在对象类型增加或删除属性时必须要带有CASCADE关键字
增加和删除对象类型方法
复杂对象类型是指与其他对象类型具有关联关系的对象类型
1.对象类型嵌套
建立对象类型
create or replace type addr_typ7 as object( state varchar2(20),city varchar2(20), street varchar2(50),zipcode varchar2(6), member function get_addr return varchar2);
建立对象类型体实现该方法:
create or replace type body addr_typ7 as member function get_addr return varchar2 is begin return state||city||street; end; end;
建立对象类型(嵌套):
create or replace type person_typ7 as object( name varchar2(10),gender varchar2(2),birthdate date,address addr_typ7, member function get_info return varchar2);
建立对象类型体:
create or replace type body person_typ7 as member fucntion get_info return varchar2 is begin return '姓名:'||name||',家庭住址:'||address.get_addr(); end;
建立操纵对象表:
create table employee_tab7( eno number(6),person person_typ7,sal number(6,2),job varchar2(10));
操纵对象表
在PLS/SQL块中为对象表插入数据
begin insert into employee_tab7(eno,sal,job,person) values(1,1500,'图书管理员',person_typ7('马丽','女','11-1月-76',addr_typ7('内蒙古','呼和浩特','囫囵路10','010010'))); insert into employee_tab7(eno,sal,job,person) values(2,1500,'图书管理员',person_typ7('马丽','女','11-1月-76',addr_typ7('内蒙古','呼和浩特','囫囵路20','010010'))); end;
在PL/SQL块中更新对象列数据
declare v_pserson person_typ7; begin select person into v_person from employee_tab7 where eno=&&no; v_person.address.street:='&street'; update employee_tab7 set person=v_person where eno=&no; end;
在PL/SQL块中检索对象列数据
declare v_person person_typ7; begin select person into v_person from employee_tab7 where eno=&no; dbms_output.put_line(v_person.get_info); end;
在PL/SQL块中删除对象表数据
begin delete from employee_tab7 where eno=&no; end;
2.参照对象类型
指在建立对象表时使用REF定义表列,REF实际是指向行对象数据的逻辑指针
通过使用REF定义表列,可以使得一个对象表引用另一个对象表(行对象)的数据,从而节省磁盘空间和内存空间
建立对象类型:
create or replace type person_typ8 as object( name varchar2(10),gender varchar2(2),birchdate date,address varchar2(50), member function get_info return varchar2);
建立对象类型体:
create or replace type body person_typ8 as member function get_info return varchar2 is begin return '姓名:'||name||',家庭住址:'||address; end; end;
建立行对象并追加数据
create table person_tab8 of person_typ8; insert into person_tab8 values('马丽','女','11-1月-76','内蒙古呼和浩特10号'); insert into person_tab8 values('王名','男','11-1月-76','内蒙古呼和浩特11号');
对象表引用对象表(REF)
建立对象表(引用表)
create table employee_tab8( eno number(6),person ref person_typ8,sal number(6,2),job varchar2(10));
操纵对象表
为对象表出入数据
引用行对象表时,需要使用函数REF(),其返回值实际是指向相应数据行的指针
begin insert into employee_tab8 select 1,ref(a),2000,'图书管理员' from person_tab8 a where a.name = '马丽'; insert into employee_tab8 select 1,ref(a),2000,'图书管理员' from person_tab8 a where a.name = '王名'; end;
检索REF对象列数据
为了取得行对象的相应数据,必须要使用DEREF函数取得REF列所对应的实际数据
declare v_person person_typ8; begin select deref(person) into v_person from employee_tab8 where eno=&no; dbms_output.put_line(v_person.get_info); end;
更新REF对象列数据
要修改其列所引用的数据,就必须修改相应的行对象
declare v_person person_typ8; begin select deref(person) into v_person from employee_tab8 where eno=&no; v_person.address:='&address'; update person_tab8 set address=v_person.address where name=v_person.name; end;
删除对象表数据
begin delete from employee_tab8 where eno=&no; end;
3.对象类型继承
指一个对象类型继承另一个对象类型,并且对象类型继承由父类型和子类型组成
父类型用于定义不同对象类型的公用属性和方法,而子类型不仅继承了父类型的公用属性和方法,而且还可具有自己的私有属性和方法.
使用对象类型继承时,在定义父类型时必须要指定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 body person_typ9 as member function get_info return varchar2 is begin return '姓名:'||name||',家庭住址:'||address; end; end;
建立子对象类型(继承):
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);
建立对象类型体(私有方法):
create or replace type body employee_typ9 as member function get_other return varchar2 is begin return '雇员名称:'||name||',工资:'||sal; end; end;
建立对象表并插入数据
sql>create table employee_tab9 of employee_typ9; sql>insert into employee_tab9 values('马丽','女','01-11月-76','呼和浩特15号',2,2000,'高级钳工'); sql>insert into employee_tab9 values('王名','男','01-11月-76','呼和浩特15号',2,2000,'高级钳工');
使用对象方法输出数据
declare v_employee employee_typ9; begin select value(a) into v_employee from employee_tab9 a where a.eno=&no; dbms_output.put_line(v_employee.get_info); dbms_output.put_line(v_employee.get_other); end;
4.维护对象类型
显示对象类型信息 执行CREATE TYPE 命令建立对象类型时,ORACLE会将对象类型的信息存放到数据字典中(USER_TYPES)
select type_name,attributes,final from user_types; desc person_typ1
增加和删除对象类型属性
如果已经基于对象类型建立了对象类型或对象表,那么在对象类型增加或删除属性时必须要带有CASCADE关键字
alter type preson_typ1 add attribute address varchar2(50) cascade alter type person_typ1 drop attrbute birthdate cascade;
增加和删除对象类型方法
alter type person_typ1 add member function get_info return varchar2 cascade; create or replace type body person_typ1 as member function get_info return varchar2 is begin return '雇员名:'||name||',家庭住址:'||address; end; end;
相关文章推荐
- PL/SQL入门--对象类型
- PL/SQL--复杂数据类型
- PL/SQL入门--复合类型及集合(3)
- 第十章 PL/SQL对象类型
- ODP.NET与复杂的PL/SQL数据类型(Using ODP.NET To Deal With Complex PLSQL Data Types)
- pl/sql入门第二章--复合数据类型
- PL/SQL 数据类型和变量 -- 大对象
- ORACLE HANDBOOK系列之六:ODP.NET与复杂的PL/SQL数据类型(Using ODP.NET To Deal With Complex PLSQL Data Types)
- pl/sql入门第四章--数据库数据对象分析(上)
- PL/SQL 基础---复杂数据类型和自定义类型
- 第十章 PL/SQL对象类型
- Oracle 中Java 对象与PL/SQL类型的映射及使用
- pl/sql入门第五章--数据库数据对象分析(下)
- 第十章 PL/SQL对象类型
- Oracle 中Java 对象与PL/SQL类型的映射及使用
- 源码-PL/SQL从入门到精通-第三章-变量和类型-Part 2
- PL/SQL入门--复合类型及集合
- 源码-PL/SQL从入门到精通-第三章-变量和类型-Part 1
- PL/SQL入门--复合类型及集合(2)
- 源码-PL/SQL从入门到精通-第三章-变量和类型-Part 3(完)