关系数据库在不断地发展时,许多数据库引入了面向对象的思想,这其中以Oracle为代表,Oracle9i就号称面向对象数据库。 自Oracle9i以来,Oracle就不再是单纯的关系数据库管理系统,它在关系数据库模型的基础上,添加了一系列面向对象的特性。Oracle的对象体系遵从面向对象思想的基本特征,许多概念同C++,JAVA中类似,具有继承,重载,多态等特征,但又有自己的特点。
1、 Oracle面向对象的最基本元素是它的对象类型——Type。
下面开始写自定义对象类型( as object 必须关键字)
- createorreplacetypeADDRESSasobject
- (
- PROVINCEvarchar(10),
- CITYvarchar(20),
- STREETvarchar(30)
- );
- 创建表并使用以上对象类型ADDRESS
- createtableSTUDENTOBJ
- (
- STUNAMEvarchar(20),
- STUADDADDRESS
- );
create or replace type ADDRESS as object
(
PROVINCE varchar(10 ),
CITY varchar(20 ),
STREET varchar(30 )
);
创建表并使用以上对象类型ADDRESS
create table STUDENTOBJ
(
STUNAME varchar(20 ),
STUADD ADDRESS
);
向表中插入数据:
insert into STUDENTOBJ values('improviser',ADDRESS('广东省','广州市','江海大道');
通过别名对表进行查询
select S.STUNAME S.ADDRESS.PROVINCE S.ADDRESS.CITY
S.ADDRESS.STREET from STUDENTOBJ S;
从上面的测试代码,可以很容易看到其与面向对象语言(比如Java)的差异,不必使用new创建实例,也没有了默认无参数构造器,默认使用定义的属性作为构造器参数,足以描述各种实体。另外,Type的属性没有private,protected,public的说法,所有的属性调用者都可以访问,即都是public。
2、Oracle中面向对象特征——继承(父类型必须声明为NOT FINAL,子类型使用关键字UNDER)
- 1创建父类型
- createorreplacetypePERSONasobject
- (
- PERNAMEvarchar(10),
- PERSEXvarchar(2)
- )notfinal;
- 子类型继承父类型
- createorreplacetypeSTUDENTunderPERSON
- (
- STUNOvarchar(8),
- STUSCOREvarchar(10)
- );
1 创建父类型
create or replace type PERSON as object
(
PERNAME varchar(10 ),
PERSEX varchar(2 )
)not final;
子类型继承父类型
create or replace type STUDENT under PERSON
(
STUNO varchar(8 ),
STUSCORE varchar(10 )
);
由以上定义,其子类型中属性包含了父类型中所有属性。
3、可变数组
可变数组,是一种集合。一个可变数组是对象的一个集合,其中每个对象都具有相同的数据类型。可变数组的大小由创建时决定。在表中建立可变数组后,可变数组在主表中作为一个列对待。
- 创建对象类型
- createorreplacetypeADDRESSasobject
- (
- PROVINCEvarchar(10),
- CITYvarchar(20),
- );
- 创建ADDRESS可变数组
- createorreplacetypeADDRESS_LISTasvarray(3)ofADDRESS;
- 创建表并使用可变数组ADDRESS_LIST
- createtableSTUDENT
- (
- STUNAMEvarchar(20),
- STUADDSADDRESS_LIST
- );
- 向表中插入数据
- insertintoSTUDENTvalues('improviser',ADDRESS_LIST(ADDRESS('广东省','广州市','江海大道'),
- ADDRESS('广东省','潮州市','潮枫路')));
- 查询(使用table函数将数据表格形式输出)
- select*fromtable(selects.STUADDSfromSTUDENTwhereSTUNAME='improviser');
创建对象类型
create or replace type ADDRESS as object
(
PROVINCE varchar(10 ),
CITY varchar(20 ),
);
创建ADDRESS可变数组
create or replace type ADDRESS_LIST as varray(3) of ADDRESS;
创建表并使用可变数组ADDRESS_LIST
create table STUDENT
(
STUNAME varchar(20 ),
STUADDS ADDRESS_LIST
);
向表中插入数据
insert into STUDENT values('improviser',ADDRESS_LIST(ADDRESS('广东省','广州市','江海大道' ),
ADDRESS( ' 广东省 ' , ' 潮州市 ' , ' 潮枫路 ' )));
查询(使用table函数将数据表格形式输出)
select *from table(select s.STUADDS from STUDENT where STUNAME='improviser');
4、嵌套表
嵌套表是表中之表,一个嵌套表是某些行的集合,它在主表中表示为其中的一列。对主表中的每一条记录,嵌套表可以包含多个行。
- 1定义嵌套表方法:
- createorreplacetypeADDRESS_TABLEastableofADDRESS;
- 基本对象类型、创建表、查询和插入数据都跟上面可变数组一样
- 嵌套表更新(table转化为表再利用表别名操作列进行更新)
- updatetable(selectS.STUADDSfromSTUDENTSwhere
- S.STUNAME='improviser')ADsetAD.PROVINCE='北京'wherecity='广州';
- 删除嵌套表记录
- deletefromtable(selectS.STUADDSfromSTUDENTS
- whereS.STUNAME='improviser')ADwhereAD.city='潮州市';
1 定义嵌套表方法:
create or replace type ADDRESS_TABLE as table of ADDRESS;
基本对象类型、创建表、查询和插入数据都跟上面可变数组一样
嵌套表更新(table转化为表再利用表别名操作列进行更新)
update table(select S.STUADDS from STUDENT S where
S.STUNAME = ' improviser ' ) AD set AD.PROVINCE = ' 北京 ' where city = ' 广州 ' ;
删除嵌套表记录
delete from table ( select S.STUADDS from STUDENT S
where S.STUNAME = ' improviser ' ) AD where AD.city = ' 潮州 市' ;
比较:可变数组,查询速度快,但是更新困难得整体更新,适用与数据不修改情况,如医生处方。使用嵌套表可以对表中的表内容进行修改而无需进行整体更新操作。
4、对象表
- 首先创建对象类型
- createorreplacetypeOFFICETYPEasobject
- (
- idvarchar(10),
- typenamevarchar(20)
- );
- 将对象类型转化为对象表
- createtableofficeofofficetype;
- 创建对象关系表(使用ref,指示OID进行对象表关联)
- createtableworker
- (
- workeridvarchar(10)primarykey,
- workernamevarchar(20),
- workerofficerefofficetpeyscopeisoffice,
- phonevarchar(20)
- );
- 使用deref取得关联对象表相关内容
- selectworkerid,workername,deref(w.workeroffice),phonefromworkerw
- whereworkerid='C001';
- 结果为
- C001张小明OFFICETYPE('0001','财务科')010-12345
- 使用VALUE(别名)查询对象内容
- selectvalue(o)fromofficeo;
首先创建对象类型
create or replace type OFFICETYPE as object
(
id varchar(10 ),
typename varchar(20 )
);
将对象类型转化为对象表
create table office of officetype;
创建对象关系表(使用ref ,指示OID进行对象表关联)
create table worker
(
workerid varchar(10) primary key ,
workername varchar(20 ),
workeroffice ref officetpey scope is office,
phone varchar(20 )
);
使用deref 取得关联对象表相关内容
select workerid,workername,deref(w.workeroffice),phone from worker w
where workerid = ' C001 ' ;
结果为
C001 张小明 OFFICETYPE('0001', '财务科') 010-12345
使用VALUE(别名)查询对象内容
select value(o) from office o;
5、对象视图
1 创建对象视图(通过OID连接dept)
- createviewdeptviewofdeptypewithobjectoid(deptno)asselect*fromdept;
- createviewemp_viewasselectmake_ref(deptview,deptno)deptoid,empno,ename
- fromemp;
create view deptview of deptype with object oid(deptno) as select *from dept;
create view emp_view as select make_ref(deptview,deptno) deptoid,empno,ename
from emp;
相关推荐
Oracle中的package对象是其他数据库中所不存在的特性之一,这是oracle面向对象编程的一种体现.我们可以像定义面向对象语言的对象一样定义oracle的package.并为package定义对应的属性(全局变量)和方法(function,...
首先基于代数规格给出面向对象测试中蜕变关系的构造准则,然后根据构造准则对GFT(Generating a Finite number of Test cases)算法中范式构造蜕变关系方法进行改进,最后通过一个整数栈类对提出的蜕变关系构造准则...
有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。 JARED STILL 从1994年就开始使用...
第41章 面向对象的高级概念 第42章 JAVA简介 第43章 JDBC程序设计 第44章 JAVA存储过程 第Ⅶ部分 指南 第45章 Oracle数据字典指南 第46章 应用程序和SQL调整指南 第47章 SQL结果缓存和客户端查询缓存 第48章 关于...
第41章 面向对象的高级概念 第42章 JAVA简介 第43章 JDBC程序设计 第44章 JAVA存储过程 第Ⅶ部分 指南 第45章 Oracle数据字典指南 第46章 应用程序和SQL调整指南 第47章 SQL结果缓存和客户端查询缓存 第48章 关于...
Java是一种高性能、跨平台的面向对象编程语言。它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计为一种简单、健壮、可移植、多线程、动态的语言。Java的主要特点和优势...
Java是一种高性能、跨平台的面向对象编程语言。它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计为一种简单、健壮、可移植、多线程、动态的语言。Java的主要特点和优势...
Java是一种高性能、跨平台的面向对象编程语言。它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计为一种简单、健壮、可移植、多线程、动态的语言。Java的主要特点和优势...
Java是一种高性能、跨平台的面向对象编程语言。它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计为一种简单、健壮、可移植、多线程、动态的语言。Java的主要特点和优势...
Oracle NoSQL,顾名思义,这是甲骨文的NoSQL数据库,基于Java版本的Berkeley DB,主要面向“需要处理海量数据、不确定数据的架构、想采集更多的流媒体数据的客户”。 Blueprints是一组针对属性图数据模型的接口、...
工资管理系统处理的事务主要有工资管理,员工信息管理,部门信息管理,职务信息管理,职称信息管理。...系统使用面向对象设计,采用JAVA语言开发, 系统采用黑盒测试策略,系统的数据使用ORACLE数据库进行管理。
U 公司面向的是一个通用软件市场、客户对象复杂、业务类型繁多、 客户的成熟度水平差别很大、涉及的业务领域多,先后涉及财政、金融、烟草、电力等行业应用软件; 同时直接与国际知名公司SAP、ORACLE 等竞争,存在...
初级开发人员编写专业的面向对象代码的最合理的方法和非无聊的指南。 | | 注意:本指南的灵感来自 Robert C. Martin 的书籍Clean Code 、 Google Java Style Guide 、 Ali-baba Guide 、 Oracle Guide 、数百个在线...
Java是一种广泛使用的面向对象编程语言,具有跨平台性和丰富的类库支持。Java语言的优势在于其可移植性和可扩展性,使得我们的项目能够在不同操作系统和硬件平台上运行。 其次,我们采用了Swing框架作为项目的GUI...
PLUTO利用了Oracle面向对象的开发功能,并提供了一个基础对象,可以从中导出自定义单元测试对象。 PLUTO的核心仅由两个对象组成:一个嵌套表,PLUTO_OBJ使用它来传递测试过程名称,然后是PLUTO_OBJ本身。 PLUTO...
采用面向对象的方法,运用 SSH 框架、Oracle 数据库等现有的技术,设计开发一个基于 SSH 框架的视频教学系统平台。主要实现教师添加课程并对课程进行管理、添加测试、上传课件等功能,同时设立管理员对教师和视频...
既然可以将Oracle的数据库作为一种面向对象的数据库来使用,就可以考虑将应用程序中的面向对象模式转到数据库中。目前的方法是创建Java bean作为伪装的数据库对象,将它们的属性映射到关系表中,然后在这些bean中...
它适用于 Linux 和 Windows(理论上应该也适用于 Mac,但尚未测试)并支持 Oracle 9i 及更高版本。 以下是当前支持的功能列表: - 完整的 unicode 支持 - 以下对象类型的创建者/编辑器/查看器:关系表、视图、包、...