从Oracle8开始就可以在数据库中使用对象了。数据库的对象类型和Java很类似,都可以包含自己的属性和方法。属性可以存储对象的状态,方法可用于建立对象的行为模型。对象类型有时候也称为用户自定义类型。
本文讲解的例子设计到三个对象类型,第一个是产品,包含产品的id、名称、说明、价格,还包含一个保质期,过期的产品必须处理掉。第二个是人,包含姓名、生日、地址。地址本身也是一个对象,地址包含街道、城市、州、邮编之类的信息。以下是三者时间的UML图。
1.创建对象类型
CREATE [OR REPLACE] TYPE 语句用于创建对象类型。下面的语句将创建地址类型。
CREATE OR REPLACE TYPE address_typ AS OBJECT(
street VARCHAR2(15),
city VARCHAR2(15),
state VARCHAR2(15),
zip VARCHAR2(6)
);
创建Person类型,注意person_typ 的address类型为address_typ。
CREATE OR REPLACE TYPE person_typ AS OBJECT(
id NUMBER,
first_name VARCHAR2(15),
last_name VARCHAR2(15),
dob DATE,
phone VARCHAR2(11),
address address_typ
);
创建产品类型,注意product_typ声明了一个函数get_sell_by_date(). 这个函数根据days_valid属性和当前日期,返回产品的最晚售出日期。
CREATE OR REPLACE TYPE product_typ AS OBJECT(
id NUMBER,
name VARCHAR2(15),
description VARCHAR2(15),
price NUMBER(5,2),
days_valid NUMBER,
MEMBER FUNCTION get_sell_by_date RETURN DATE
);
MEMBER FUNCTION 字句用于声明get_sell_by_date()函数;MEMBER PROCEDURE用于声明一个过程。过程与函数唯一的区别就是过程通常没有返回值。
由于product_typ 包含了方法的声明,所以必须为product_typ 创建对象体。可以通过CREATE TYPE BODY 语句创建对象体。下面的代码为product_typ 创建对象体。注意这个对象体中get_sell_by_date()函数的定义代码。
CREATE OR REPLACE TYPE BODY product_typ AS
MEMBER FUNCTION get_sell_by_date RETURN DATE IS
v_sell_by_date DATE;
BEGIN
SELECT days_valid + SYSDATE INTO v_sell_by_date FROM dual;
RETURN v_sell_by_date;
END;
END;
2.使用DESCRIBE获取有关对象类型的信息
DESCRIBE命令可以用来获得对象类型的信息。下面是address_typ和 person_typ的说明。
SQL> desc address_typ;
Element Type
------- ------------
STREET VARCHAR2(15)
CITY VARCHAR2(15)
STATE VARCHAR2(15)
ZIP VARCHAR2(6)
SQL> desc person_typ;
Element Type
---------- ------------
ID NUMBER
FIRST_NAME VARCHAR2(15)
LAST_NAME VARCHAR2(15)
DOB DATE
PHONE VARCHAR2(11)
ADDRESS ADDRESS_TYP
SET DESCRIBE DEPTH 可以设置DESCRIBE显示信息的深度。下面这个例子将深度改为2,然后显示person_typ的信息。
注意:SET DESCRIBE DEPTH 必须在sql*plus中用system登录才可以执行。
4.用对象类型定义列对象和对象表
对象类型可以用来定义表中的列,这种列称为列对象(Column Object)。同时,当对象类型包含嵌入对象类型时,嵌入对象类型也是一个列对象。person_typ就是一个例子,其中包含一个嵌入的address_typ列对象,名为address。
下面这个例子创建表products,其中包含一个product_typ列对象。注意还包含一个quantity_in_stock,表示库存的数量。
CREATE TABLE products(
product product_typ,
quantity_in_stock NUMBER
);
也可以用对象类型定义表,这个表称为对象表(Object Table).下面两句代码分别创建object_products和object_customers,分别使用product_typ和person_typ定义。注意OF字句将每个表表示为对象表。
CREATE TABLE object_products OF product_typ;
CREATE TABLE object_customers OF person_typ;
包含列对象的表和对象表之间的唯一区别是,前者可以含有其他列。
对象引用与对象标识符
对象表的另一个不同之处可以使用对象引用(objec reference)为对象表之间的关系建立模型,而不是外键。对象引用使用REF类型进行定义,通常都用作指向对象表中的对象的指针。对象表中的每个对象都具有惟一的对象标识符 (object identifier,OID),它可以存储在REF列中。下面这个例子创建purchases,其中包含两个REF列:
CREATE TABLE purchases(
id NUMBER PRIMARY KEY,
customer REF person_typ SCOPE IS object_customers,
product REF product_typ SCOPE IS object_products
);
SCOPE IS 字句将对象引用限制在特定表中的对象上,例如,customer列被限制在指向object_customers表中的对象。
下一篇将主要讲解对对象类型的DML操作。
- 大小: 42 KB
- 大小: 23.2 KB
分享到:
相关推荐
实验2 MySQL数据库对象管理
Oracle数据库对象管理及备份与恢复,适合期末复习使用
国家开放大学的课程:数据运维。在形考中的内容。实验2实验2 MySQL数据库对象管理。包括所有的相关操作。有屏幕截图,很清楚 。
国家开放大学 数据库运维 形考2 MySQL数据库对象管理
将数据库对象,通过代码程序,直接转换为Java Bean对象
1. 两个 MYSQL 数据库对象结构比对工具 (比如:本地测试库、远程运维库表结构、表中列等对比) 2. 比对结果导出EXCEL 存放于 “工程根目录”/export/ 目录下 3. 比对的对象包括 表、表列、表索引、表分区差异、...
mysql数据库对象
数据库数据库数据库对象数据库数据库数据库对象连接
本文档描述了数据库设计规则、数据库对象命名规范,SQL语句规则,软件开发项目中的必备文档,免得每次都要自己重新写
数据库技术实验报告(过程式数据库对象的使用)
数据库对象命名参考 PDF文档,数据库对象命名参数。
国家开放大学的课程:数据运维。在形考中的内容。 包括所有的相关操作。有屏幕截图,很清楚
SAP初探之ABAP-数据库对象 解释说明 在ABAP里面 面向对象的概念
IBM-ETP-Oracle04第四章 数据库对象管理 IBM-ETP-Oracle04第四章 数据库对象管理
国家开放大学《数据库运维》实验2 MySQL数据库对象管理.docx
实验二数据库及数据库对象的创建和管理2(1).doc
PostgreSQL数据库对象名大小写敏感
查询数据库的数据文件及日志文件的相关信息(包括文件组、当前文件大小、文件最大值、文件增长设置、文件逻辑名、文件路径等)
oracle数据库对象(普通表、分区表的创建和删除,索引、约束的创建和删除,表空间的创建、删除和扩展)和触发器、存储过程、job查看、表空间使用情况查询