首页 百科知识 对象的使用

对象的使用

时间:2022-10-09 百科知识 版权反馈
【摘要】:本章介绍面向对象数据库系统的基本概念和一般特征。面向对象数据库是数据库技术与面向对象技术相结合的产物。Oracle9i不是一个单纯的关系型数据库管理系统,而是一个对象一关系数据库管理系统.它将面向对象程序设计思想引入到数据库管理领域中,从而使得传统的关系型数据库系统的操作更加贴近现实。Oracle9i中的对象类型与C++和Java语言中的类相同,它构成Oracle9i对象—关系型数据库管理系统的对象基础。

7.5 对象的使用

对象的使用是这一节的主体部分,将有几个具体的例子来说明应如何使用对象进行数据处理。

7.5.1 创建一个对象类型

可以使用CREATETYPE语句创建一个对象类型:

CREATE OR REPLACE TYPE A_BOOK AS OBJECT

(ID_NO NUMBER(10),

BOOKNAME VARCHAR2(30),

LIBRARY_DESCRIPTION VARCHAR2(30),

PUBLISH_DATE DATE,

MEMBER PROCEDURE set_book_no(new_book_no IN NUMBER)

MEMBER FUNCTION get_book_name RETURN VARCHAR2,

MEMBER PROCEDURE book_has_publish(died_on IN DATE)

);

7.5.2 创建一个对象类型体

可以使用CREATE TYPE BODY语句创建一个类型体:

CREATE OR REPLACE TYPE BODY A_BOOK AS

MEMBER PROCEDURE set_book_no(new_book_no IN NUMBER)is

BEGⅨ

book_m:=new_book_no;

END;

MEMBER FUNCTION get_book_name RETURN VARCHAR2 is

BEGIN

RETURN book_name;

END;

7.5.3 使用构造成员方法

构造成员方法(Constructor method)是用来创建一个已经定义了的对象的例程。

Constructor method总和对象类型有一样的名字,并且它的定义是隐含的。不论什么时候使用CREATETYPE语句来创建一个类型,Oracle总会自动地为该类型生成一个Constructor method。该成员方法总被作为参数传递的类型属性定义。和A_BOOK类型一样,这个自动定义的构造成员的过程如下所示:

METHOD PROCEDURE A_BOOK(

  ID_NONUMBER(10),

  BOOKNAME VARCHAR2(30),

  LIBRARY_DESCRIPTION VARCHAR2(30),

PUBLISH_DATE DATE

);

7.5.4 使用map成员方法和order成员方法

Oracle中提供了两种特殊的成员方法来比较两个对象。如果待比较的两个对象相等,那么较好处理,只要比较这两个对象的属性就可以了。但是,如果要比较这两个对象之中哪个大,就是较复杂的问题了,用户必须定义何为“大”,对于动物而言,“大”可能是指长一些、重一些、老一些或是宽一些。要回答这些问题就要用到map和order这两种成员方法了。

这两种成员方法允许定义为一种方式,在这种方式中,相同类型的两个对象根据彼此的情况进行排序。map成员方法允许计算一个单个的数值来表示比较的结果。用户可以返回一个NUMBER、DATE或者是VARCHAR2型的值。map成员方法使用MAP关键字来定义,并且它在声明中是第一个关键字。而Order方法为一个对象类型定义并且把另一个相同类型的对象作为一个参数。

Order成员方法返回一个整数值来说明作为参数传递的对象和已知的一个对象两者之间谁大、谁小或者相同的情况。

编写的比较两个对象的程序代码不会受所使用的成员方法的影响。更进一步讲,map成员方法中使用的程序代码也可以被Order成员方法所使用。这两种成员方法的区别在于Oracle内部如何实现比较这一功能。

通常,使用order成员方法不如map成员方法效率高。当在SQL查询中使用ORDER BY子句引出一个对象时,这一点尤其明显。

使用map成员方法时,Oracle只为查询操作调用map成员方法一次,并将查询返回的结果进行排序;而使用order成员方法时,Oracle却要为每个对象调用order成员方法多次,并为查询返回的结果进行排序。

7.5.5 对象前向声明

参照对象时,被参照的对象必须存在,否则在编译时将产生错误,这就要求用户必须首先建立被参照的对象类型,然后才能参照。但是,如果两个对象互为参照,这时,将无法使用前面介绍的方法创建这两个对象,因为在创建一个对象时,另一个对象还不存在。这种情况只能使用对象前向声明的方法加以解决。对象前向声明类似于C语言中的函数原形说明,它提前声明一个对象类型,使得其他语句在参照该对象类型时,PL/SQL编译器即认为它已经存在。

7.5.6 对象的修改

对象表中的每一行对象均拥有一个对象标识符,它是各行对象的唯一标志,所以可作为对象参照类型使用。而在关系表中,其对象列则没有对象标识符。在建立对象表后,使用INSERT语句向对象表中插入行对象。对于对象表和关系表,可以使用对象类型的构造函数向表中插入对象。

使用UPDATE语句修改表中对象属性。应该注意的是:在参照表中对象属性和方法时,必须使用表的别名,而不能使用表名。对于关系表,在限定对象时,还必须同时指定对象列名。与删除普通表中数据行的方法相同,执行DELETE语句即可删除表中对象。

小结

本章介绍面向对象数据库系统的基本概念和一般特征。面向对象数据库是数据库技术与面向对象技术相结合的产物。面向对象数据库的产生和发展受应用需求的直接驱动,其目标在于满足不断增长的新应用需求。

对象—关系型数据库在关系型数据库系统的基础上引入了面向对象的设计方法,表现在允许用户根据需要自定义数据类型,在SQL中支持复杂对象、支持数据继承等方面,目的是更加真实地建立数据模型并提供强大的类似程序设计语言的数据处理功能。

对象—关系数据库具备简单关系数据库中所不具备的优势有:

(1)能够以更快的速度和更少的花费创建数据库。

(2)能够更容易地、以更少的花费维护数据库。

(3)系统将会更加灵活和健壮,因而事务中的变化或新发现的需求能够更容易地、以最少的花费被修改。

Oracle9i不是一个单纯的关系型数据库管理系统,而是一个对象一关系数据库管理系统.它将面向对象程序设计思想引入到数据库管理领域中,从而使得传统的关系型数据库系统的操作更加贴近现实。Oracle9i中的对象类型与C++和Java语言中的类相同,它构成Oracle9i对象—关系型数据库管理系统的对象基础。

(赵 凯 杨 珂)

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈