Oracle 面向对象编程的探索
这个题目完全可以按一本书来写,一篇文章远远不能描述清楚 Oracle 面向对象技术,不过
就笔者所知,很少 Oracle 项目会
大规模使用其面向对象技术做开发,笔者在这里谈 Oracle 面向对象,翼此能够起到抛砖引
玉的作用,让大家有想法进一步去探索
数据库面向对象编程。当然,笔者在这里和大家探讨的内容主要来自项目中的积累,而非
笔者兴起之作,大家可以放心的在项目中
使用。
我们可以把应用按技术简单的分两层:数据库层和应用层,数据层一般来说是面向关系模
型,应用层是面向对象模型,很多时候我们需要写
代码把关系数据转化为实体对象,这是一个繁重又需要开发者细心的一个工作。为了把开
发者从中解脱出来,诞生了很多技术,O/R
Mapping 的有 Hibernate,一些 JDO 产品,EJB CMP 等,对象数据库的有 DB4O、MyOODB
等。但是,到目前为止,这些技术并不能帮我们解决开发中的
主 要 矛 盾 。 O/R Mapping 工 具 只 能 映 射 简 单 的 关 系 模 型 , 处 理 普 通 的
DML(Insert,Update,Delete),在批处理和过程处理上就捉襟见肘了,
大数据量处理的时候又存在效率低下、内存消耗巨大等诸多问题。对象数据库是九十年代
兴起的技术,目前在嵌入式开发以及一些小应用中有一定的市场,
当然还不能用于大型企业应用,主要的原因是功能太简单了,大数据量存储和处理性能都
无法得到保证,开发者的需求不能充分地得到满足。
大型应用还是要借助传统的关系数据库,这样性能和可靠性都能够得到保证。关系数据
库也在不断地发展,许多数据库也引入了面向对象的
思想,这其中以 Oracle 为代表,Oracle9i 就号称面向对象数据库,当然,这有打广告的嫌
疑,不过如果使用好了 Oracle 的面向对象技术,
还是可以大大简化我们的许多开发工作。
下面我们切入主题,自 Oracle9i 以来,Oracle 就不再是单纯的关系数据库管理系统,它
在关系数据库模型的基础上,添加了一系列面向对象的特性。
Oracle 的对象体系遵从面向对象思想的基本特征,许多概念同 C++,JAVA 中的类似,具有
继承,重载,多态等特征,但又有自己的特点。Oracle
面向对象的最基本元素是它的对象类型,也就是 Type,在 Oracle8i 中,Type 只用作数据类
型,而且成员只能是基本数据类型,这里顺便提一下,创建者之外
的其他用户需要得到授权才能使用对象类型。前面也提到,Oracle 面向对象的内容很多,
以 Type 为基础的对象存储,对象查询内容很丰富,限于篇幅,
本文就不探讨这些内容,重心放在面向对象编程的几大特性(继承、重载、多态)上。
我们先写一个简单的 Type:
CREATE OR REPLACE TYPE SIMPLE AS OBJECT
(
id VARCHAR2(10),
name VARCHAR2(30)
)
现在有了这个对象,如何使用呢?