Oracle中的面向对象OOP
关系数据库在不断地发展时,许多数据库引入了面向对象的思想,这其中以Oracle为代表,Oracle9i就号称面向对象数据库。 自Oracle9i以来,Oracle就不再是单纯的关系数据库管理系统,它在关系数据库模型的基础上,添加了一系列面向对象的特性。Oracle的对象体系遵从面向对象思想的基本特征,许多概念同C++,JAVA中类似,具有继承,重载,多态等特征,但又有自己的特点。
1、 Oracle面向对象的最基本元素是它的对象类型——Type。
下面开始写自定义对象类型( as object 必须关键字)
创建表并使用以上对象类型ADDRESS
通过别名对表进行查询
从上面的测试代码,可以很容易看到其与面向对象语言(比如Java)的差异,不必使用new创建实例,也没有了默认无参数构造器,默认使用定义的属性作为构造器参数,足以描述各种实体。另外,Type的属性没有private,protected,public的说法,所有的属性调用者都可以访问,即都是public。
2、Oracle中面向对象特征——继承(父类型必须声明为NOT FINAL,子类型使用关键字UNDER)
3、可变数组
可变数组,是一种集合。一个可变数组是对象的一个集合,其中每个对象都具有相同的数据类型。可变数组的大小由创建时决定。在表中建立可变数组后,可变数组在主表中作为一个列对待。
4、嵌套表
嵌套表是表中之表,一个嵌套表是某些行的集合,它在主表中表示为其中的一列。对主表中的每一条记录,嵌套表可以包含多个行。
1、 Oracle面向对象的最基本元素是它的对象类型——Type。
下面开始写自定义对象类型( as object 必须关键字)
1createorreplacetypeADDRESSas object
2 (
3PROVINCEvarchar(10 ),
4CITYvarchar(20 ),
5STREETvarchar(30 )
6);
2 (
3PROVINCEvarchar(10 ),
4CITYvarchar(20 ),
5STREETvarchar(30 )
6);
创建表并使用以上对象类型ADDRESS
1createtable STUDENTOBJ
2 (
3STUNAMEvarchar(20 ),
4 STUADDADDRESS
5 );
6
7 向表中插入数据:
8insertintoSTUDENTOBJvalues('improviser',ADDRESS('广东省','广州市','江海大道');
2 (
3STUNAMEvarchar(20 ),
4 STUADDADDRESS
5 );
6
7 向表中插入数据:
8insertintoSTUDENTOBJvalues('improviser',ADDRESS('广东省','广州市','江海大道');
通过别名对表进行查询
1select S.STUNAMES.ADDRESS.PROVINCES.ADDRESS.CITY
2 S.ADDRESS.STREET from STUDENTOBJS;
2 S.ADDRESS.STREET from STUDENTOBJS;
从上面的测试代码,可以很容易看到其与面向对象语言(比如Java)的差异,不必使用new创建实例,也没有了默认无参数构造器,默认使用定义的属性作为构造器参数,足以描述各种实体。另外,Type的属性没有private,protected,public的说法,所有的属性调用者都可以访问,即都是public。
2、Oracle中面向对象特征——继承(父类型必须声明为NOT FINAL,子类型使用关键字UNDER)
1 创建父类型
2createorreplacetypePERSONas object
3 (
4PERNAMEvarchar(10 ),
5PERSEXvarchar(2 )
6)not final;
7
8 子类型继承父类型
9createorreplace typeSTUDENTunderPERSON
10 (
11STUNOvarchar(8 ),
12STUSCOREvarchar(10 )
13 );
由以上定义,其子类型中属性包含了父类型中所有属性。
2createorreplacetypePERSONas object
3 (
4PERNAMEvarchar(10 ),
5PERSEXvarchar(2 )
6)not final;
7
8 子类型继承父类型
9createorreplace typeSTUDENTunderPERSON
10 (
11STUNOvarchar(8 ),
12STUSCOREvarchar(10 )
13 );
由以上定义,其子类型中属性包含了父类型中所有属性。
3、可变数组
可变数组,是一种集合。一个可变数组是对象的一个集合,其中每个对象都具有相同的数据类型。可变数组的大小由创建时决定。在表中建立可变数组后,可变数组在主表中作为一个列对待。
1 创建对象类型
2createorreplacetypeADDRESSas object
3 (
4PROVINCEvarchar(10 ),
5CITYvarchar(20 ),
6 );
7
8 创建ADDRESS可变数组
9createorreplacetypeADDRESS_LISTasvarray(3)of ADDRESS;
10
11 创建表并使用可变数组ADDRESS_LIST
12createtable STUDENT
13 (
14STUNAMEvarchar(20 ),
15 STUADDSADDRESS_LIST
16 );
17
18 向表中插入数据
19insertintoSTUDENTvalues('improviser',ADDRESS_LIST(ADDRESS('广东省','广州市','江海大道' ),
ADDRESS( ' 广东省 ' , ' 潮州市 ' , ' 潮枫路 ' )));
20
21 查询(使用table函数将数据表格形式输出)
22select*fromtable(selects.STUADDSfromSTUDENTwhereSTUNAME='improviser');
2createorreplacetypeADDRESSas object
3 (
4PROVINCEvarchar(10 ),
5CITYvarchar(20 ),
6 );
7
8 创建ADDRESS可变数组
9createorreplacetypeADDRESS_LISTasvarray(3)of ADDRESS;
10
11 创建表并使用可变数组ADDRESS_LIST
12createtable STUDENT
13 (
14STUNAMEvarchar(20 ),
15 STUADDSADDRESS_LIST
16 );
17
18 向表中插入数据
19insertintoSTUDENTvalues('improviser',ADDRESS_LIST(ADDRESS('广东省','广州市','江海大道' ),
ADDRESS( ' 广东省 ' , ' 潮州市 ' , ' 潮枫路 ' )));
20
21 查询(使用table函数将数据表格形式输出)
22select*fromtable(selects.STUADDSfromSTUDENTwhereSTUNAME='improviser');
4、嵌套表
嵌套表是表中之表,一个嵌套表是某些行的集合,它在主表中表示为其中的一列。对主表中的每一条记录,嵌套表可以包含多个行。
1 定义嵌套表方法:
2createorreplacetypeADDRESS_TABLEastableof ADDRESS;
3
4 基本对象类型、创建表、查询和插入数据都跟上面可变数组一样
5
6嵌套表更新(table转化为表再利用表别名操作列进行更新)
7updatetable(selectS.STUADDSfromSTUDENTSwhere
8 S.STUNAME = ' improviser ' )AD set AD.PROVINCE = ' 北京 ' where city = ' 广州 ' ;
9
10 删除嵌套表记录
11 delete from table ( select S.STUADDS from STUDENTS
12 where S.STUNAME = ' improviser ' )AD where AD.city = ' 潮州 市' ;
13
2createorreplacetypeADDRESS_TABLEastableof ADDRESS;
3
4 基本对象类型、创建表、查询和插入数据都跟上面可变数组一样
5
6嵌套表更新(table转化为表再利用表别名操作列进行更新)
7updatetable(selectS.STUADDSfromSTUDENTSwhere
8 S.STUNAME = ' improviser ' )AD set AD.PROVINCE = ' 北京 ' where city = ' 广州 ' ;
9
10 删除嵌套表记录
11 delete from table ( select S.STUADDS from STUDENTS
12 where S.STUNAME = ' improviser ' )AD where AD.city = ' 潮州 市' ;
13
比较:可变数组,查询速度快,但是更新困难得整体更新,适用与数据不修改情况,如医生处方。使用嵌套表可以对表中的表内容进行修改而无需进行整体更新操作。
4、对象表
1 首先创建对象类型
2createorreplacetypeOFFICETYPEas object
3 (
4idvarchar(10 ),
5typenamevarchar(20 )
6 );
7
8 将对象类型转化为对象表
9createtableofficeof officetype;
10
11 创建对象关系表(使用ref,指示OID进行对象表关联)
12createtable worker
13 (
14workeridvarchar(10)primarykey ,
15workernamevarchar(20 ),
16workerofficerefofficetpeyscopeis office,
17phonevarchar(20 )
18 );
19
20 使用deref取得关联对象表相关内容
21selectworkerid,workername,deref(w.workeroffice),phonefrom workerw
where workerid = ' C001 ' ;
22 结果为
23C001张小明OFFICETYPE('0001','财务科') 010-12345
24
25 使用VALUE(别名)查询对象内容
26selectvalue(o)from officeo;
27
2createorreplacetypeOFFICETYPEas object
3 (
4idvarchar(10 ),
5typenamevarchar(20 )
6 );
7
8 将对象类型转化为对象表
9createtableofficeof officetype;
10
11 创建对象关系表(使用ref,指示OID进行对象表关联)
12createtable worker
13 (
14workeridvarchar(10)primarykey ,
15workernamevarchar(20 ),
16workerofficerefofficetpeyscopeis office,
17phonevarchar(20 )
18 );
19
20 使用deref取得关联对象表相关内容
21selectworkerid,workername,deref(w.workeroffice),phonefrom workerw
where workerid = ' C001 ' ;
22 结果为
23C001张小明OFFICETYPE('0001','财务科') 010-12345
24
25 使用VALUE(别名)查询对象内容
26selectvalue(o)from officeo;
27
5、对象视图
1 创建对象视图(通过OID连接dept)
2createviewdeptviewofdeptypewithobjectoid(deptno)asselect*from dept;
3createviewemp_viewasselect make_ref(deptview,deptno)deptoid,empno,ename
4 from emp;
2createviewdeptviewofdeptypewithobjectoid(deptno)asselect*from dept;
3createviewemp_viewasselect make_ref(deptview,deptno)deptoid,empno,ename
4 from emp;
好了,有关Oracle中面向对象的内容就简要叙述这么多了,虽然现在很少使用到,但在以后有用到之处有一定的参考作用。
相关推荐
文档中提到的Oracle 10g是Oracle数据库的一个版本,它在面向对象方面做了重要的扩展。这些扩展包括支持对象类型、对象类型的继承和演化、动态方法调度、对象表以及SQL对象等特性,它们都是在关系结构的基础上进行了...
面向对象编程(Object-Oriented Programming,简称OOP)是一种重要的编程范式,它通过将数据和操作数据的方法封装在对象中,实现了程序设计的模块化和抽象化。本教程对比了两种广泛应用的面向对象语言——C++和Java...
Java面向对象程序设计是计算机编程领域中的核心主题,它基于面向对象编程(OOP)理念,使得代码更具有模块化、可复用性和易于维护的特点。以下是对标题和描述中涉及的知识点的详细阐述: 1. **第1章:Java入门** -...
面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,强调用对象来表示现实世界中的实体。在Java中,类是对象的蓝图,包含了数据(字段)和操作这些数据的方法。为了实现分页查询,我们可以创建一个...
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。它的设计目标是提供一种简单、面向对象、健壮且平台无关的编程语言,使得开发者能够“一次编写,到处运行”。...
面向对象编程(Object-Oriented Programming,简称OOP)是一种软件开发方法,它通过“对象”这一基本单位来组织代码。对象是类的一个实例,拥有自己的属性(数据)和行为(函数)。面向对象的设计思想可以提高代码的...
Java面向对象程序设计是软件开发领域中的核心概念,它基于“万物皆对象”的思想,将现实世界中的事物抽象为计算机程序中的对象,从而实现代码的模块化和复用性。本教程《Java面向对象程序设计教程》深入浅出地讲解了...
Java是一种强类型、面向对象的语言,由Sun Microsystems(现为Oracle公司)于1995年推出。它的设计理念是“一次编写,到处运行”(Write Once, Run Anywhere),这意味着Java程序可以在不同的操作系统上无缝运行,只...
Oracle的面向对象编程(OOP)功能进一步增强了其灵活性,可以创建对象类型、对象表、嵌套表和集合类型。Package是封装相关对象和过程的一种机制,可以提升代码的组织性和模块化。 最后,文档提到了XML操作和与操作...
面向对象编程(Object-Oriented Programming, OOP)是现代软件开发中广泛采用的方法,它基于类和对象的概念,强调数据封装、继承和多态性,从而提高代码的重用性和可维护性。 1. **Java基础语言部分** 在Java的...
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。它的设计理念是“一次编写,到处运行”,这意味着编写好的Java代码可以在任何支持Java的平台上运行,无需重新...
这种数据库系统结合了面向对象的灵活性和关系数据库的查询效率,如Informix、DB2、Oracle和Sybase等,它们通过扩展SQL或开发新的持久化机制来支持面向对象模型。 总的来说,面向对象数据库系统通过引入面向对象的...
Java是一种强类型、面向对象的语言,由Sun Microsystems(现为Oracle公司)于1995年推出。它的设计目标是具有平台无关性,通过Java虚拟机(JVM)实现跨平台运行。Java的核心特性包括类、对象、接口、继承、封装、...
面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它基于“对象”的概念,将数据和操作数据的方法封装在一起,使得代码更易于理解和维护。Java是一种广泛使用的、面向对象的编程语言,它由Sun ...
1. **面向对象软件开发概述**:面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它基于“对象”的概念,将数据和操作数据的方法封装在一起。在面向对象的软件开发中,我们创建类来定义对象的...
2. **面向对象编程(OOP)**:面向对象是现代编程范式之一,强调以“对象”为中心来组织代码。Java完全支持OOP,包括类、对象、封装、继承、多态等核心概念。类是对象的模板,对象是类的实例;封装是隐藏实现细节,...
在面向对象编程(Object-Oriented Programming, OOP)中,Java是一种常用的语言,其核心理念是通过类和对象来抽象和组织代码。在这个项目中,我们可以将各种人事管理功能视为独立的对象,如员工对象、部门对象、考勤...
面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它将数据和操作数据的方法组织成独立的实体——对象。在VC++中,C++语言支持OOP的关键特性,如类、封装、继承和多态性。 1. **类与对象**:类是...
在本主题中,我们将深入探讨Java语言及其面向对象程序设计的核心概念,特别是在实验三的背景下。这个主题旨在帮助学生理解并应用这些概念来解决问题和编写实际的程序代码。 首先,让我们了解一下Java语言的基础。...