62
1 中 中 中 中 CS&S CS&S 中中中中中中中中中中中中 中中中中中中中中中中中中 CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD. CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD. Oracle8 Oracle8 i i 新新新 新新新

Oracle8 i 新特性

Embed Size (px)

DESCRIPTION

Oracle8 i 新特性. 对象关系数据库. 1.1 传统关系模型的缺点 1.2 面向对象( oop) 的基本概念 1.3 对象类型( object) 1.4 收集类型( collection) 1.5 对象视图( object view). 认识 抽象. 数据模型是模型化数据和信息的工具。. 现实世界. 信息世界-概念模型. 转换. 机器世界- DBMS 支持的数据 模型. 系主任. 1 1. 领导. 系. E-R 图转换成关系模式. 1 : 1. 系(系名,类别,系主任). 系主任 ( 工作证号, 姓名, 年龄). 班级. - PowerPoint PPT Presentation

Citation preview

Page 1: Oracle8 i 新特性

1 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

Oracle8Oracle8ii 新特性新特性

Page 2: Oracle8 i 新特性

2 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象关系数据库对象关系数据库

1.1 传统关系模型的缺点 1.2 面向对象 (oop) 的基本概念 1.3 对象类型( object) 1.4 收集类型( collection) 1.5 对象视图( object view)

Page 3: Oracle8 i 新特性

3 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

数据模型是模型化数据和信息的工具。数据模型是模型化数据和信息的工具。

现实世界

认识抽象信息世界-概念模型

机器世界-DBMS 支持的数据模型

转换

Page 4: Oracle8 i 新特性

4 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

EE-- RR 图转换成关系模式图转换成关系模式1 : 1

系(系名,类别,系主任)领导

系主任

1

1系主任 ( 工作证号, 姓名, 年龄)

Page 5: Oracle8 i 新特性

5 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

EE-- RR 图转换成关系模式图转换成关系模式1 : N

包括

班级

学生

1

N

班级(班号,班主任,系)学生(学号,姓名,性别,班号)

Page 6: Oracle8 i 新特性

EE-- RR 图转换成关系模式图转换成关系模式M : N

选课学生

课程

M

N

学生(学号,姓名,性别,班号)课程(课号,课名,学分)选课(学号,课号,成绩)

成绩实体集 - 关系联系-关系:由联系的各实体集主码属性,以及联系本身的属性组成。

Page 7: Oracle8 i 新特性

7 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

关系模型的特点关系模型的特点•关系模型的概念单一,实体和联系都是用关系来表示• 关系必须是规范化的关系,要求每一分量不可再分• 支持关系语言,具有高度非过程化,支持集合运算• 通过外来码实现联系• 关系模型有严格的数据基础

Page 8: Oracle8 i 新特性

8 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

传统关系模型存在的缺陷传统关系模型存在的缺陷• 复杂属性只能拆分成并列的单一属性复杂属性只能拆分成并列的单一属性• 无法表示变长的属性无法表示变长的属性• 无法直接表示嵌套表无法直接表示嵌套表• 必须大量使用必须大量使用 JOINJOIN 来实现多表查询来实现多表查询

Page 9: Oracle8 i 新特性

9 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

1.2 1.2 面向对象面向对象 ((oop)oop) 的基本概念 的基本概念 • 类和对象类和对象• 方法和封装方法和封装• 继承和子类继承和子类• 多态性多态性

Page 10: Oracle8 i 新特性

10 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

类和对象类和对象类(类( ClassClass ))或抽象数据类型(或抽象数据类型( ADTADT):):

是具有相同特征的事物的抽象表示是具有相同特征的事物的抽象表示类的属性或特征类的属性或特征类的方法类的方法

对象是类的一个实例对象是类的一个实例当前流行的程序设计方法:当前流行的程序设计方法:类:按钮类:按钮

属性:大小、属性:大小、 TEXTTEXT方法:方法: clickedclicked

对象:一个确认按钮对象:一个确认按钮

Page 11: Oracle8 i 新特性

11 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

方法和封装方法和封装方法是操纵对象类型的过程方法是操纵对象类型的过程方法用于封装对象方法用于封装对象封装是对对象的一种保护方法,它决定着对象如何被访封装是对对象的一种保护方法,它决定着对象如何被访问问封装对用户和开发人员隐藏了底层开发的细节封装对用户和开发人员隐藏了底层开发的细节

Page 12: Oracle8 i 新特性

12 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

任何对象类型可以通过创建子类的方法定义,子类延用了上级的任何对象类型可以通过创建子类的方法定义,子类延用了上级的属性属性用继承实现代码重用用继承实现代码重用

Entity

Round Angle

Circle Ecllipse Triangle Rectangle Polyangle

继承和子类继承和子类

Page 13: Oracle8 i 新特性

13 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象词汇表 名词 定义

class(类) 产生(instantiate)对象(class的 instance)的工厂

encapsulation(封装)

隐藏属性和行为-类似于接口

inheritance ( 继承)

类和子类的关系,子类可以使用类定义的各种属性和行为

instance(实例) 类的实例是对象 instantiate(实例化)

创建一个类的实例-对象

message(消息) 对象之间的通讯,通讯中包含的数据为执行的方法和涉及的对象

method(方法) 类行为的实现方法 object(对象) 问题的部件,类的实例 polymorphism(多态)

用于描述不同对象对于相同的消息反应不同的情况,例如画对于方对象和圆对象来说有不同的行为

state(状态) 对象属性的值 subclass(子类) 从其它类中继承属性和行为的类

Page 14: Oracle8 i 新特性

14 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

1.3 1.3 对象类型对象类型• 扩充的类型系统扩充的类型系统

OracleOracle 是一个开放的类型系统,增加了是一个开放的类型系统,增加了复杂的数据类型以及用户自定义类型复杂的数据类型以及用户自定义类型用户定义的数据类型使得可以在数据库用户定义的数据类型使得可以在数据库中为现实世界的对象建模中为现实世界的对象建模应用逻辑从应用程序中移动到数据库中应用逻辑从应用程序中移动到数据库中

Page 15: Oracle8 i 新特性

15 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型对象类型必须包含一个或多个属性对象类型必须包含一个或多个属性属性的类型可以是属性的类型可以是 OracleOracle 的原始数据类型、的原始数据类型、 LOBLOB 、、对象、对象的引用对象、对象的引用 REFREF 、、收集收集 COLLECTIONCOLLECTION可以有可以有 11 个或多个方法个或多个方法对象类型不存储数据;必须创建相应的表来存储数据对象类型不存储数据;必须创建相应的表来存储数据

Page 16: Oracle8 i 新特性

16 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

例子:定义对象类型例子:定义对象类型CREATE TYPE name_type AS OBJECT (CREATE TYPE name_type AS OBJECT (

first_namefirst_name VARCHAR2(30),VARCHAR2(30),last_namelast_name VARCHAR2(30));VARCHAR2(30));

CREATE TYPE address_type AS OBJECT (CREATE TYPE address_type AS OBJECT (streetstreet VARCHAR2(30), VARCHAR2(30),citycity VARCHAR2(20), VARCHAR2(20),zipzip VARCHAR2(7)); VARCHAR2(7));

对象类型对象类型

Page 17: Oracle8 i 新特性

17 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

CREATE TYPE cust_type AS OBJECT(CREATE TYPE cust_type AS OBJECT(custidcustid NUMBER,NUMBER,invoice VARCHAR2(1),invoice VARCHAR2(1),namename name_type, name_type,address address_type);address address_type);

CREATE TABLE customer (CREATE TABLE customer ( custid NUMBER PRIMARY KEY,custid NUMBER PRIMARY KEY, name NAME_TYPE,name NAME_TYPE, address address_type);address address_type); CREATE TABLE customers OF cust_typeCREATE TABLE customers OF cust_type

(custid PRIMARY KEY);(custid PRIMARY KEY);

对象类型对象类型

Page 18: Oracle8 i 新特性

18 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象存储对象存储 :: 包含嵌套对象类型的表的存储是顺序的,类似包含嵌套对象类型的表的存储是顺序的,类似于关系表的存储于关系表的存储custid, invoice, name.first_name, name.last_name, custid, invoice, name.first_name, name.last_name, address.street, address.city, address.zipaddress.street, address.city, address.zipcustid, invoice, name.first_name, name.last_name, custid, invoice, name.first_name, name.last_name, address.street, address.city, address.zipaddress.street, address.city, address.zip

对象类型对象类型

Page 19: Oracle8 i 新特性

19 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型• 对象类型的对象类型的 DDLDDL 命令命令

CREATE TYPECREATE TYPE ,, CREATE TYPE BODYCREATE TYPE BODYDROP TYPE DROP TYPE ,, DROP TYPE BODYDROP TYPE BODYALTER TYPEALTER TYPE ,, ALTER TYPE BODYALTER TYPE BODY((不能增加属性,只能增加方法或编译类型)不能增加属性,只能增加方法或编译类型)GRANT/REVOKE EXECUTE ON TYPEGRANT/REVOKE EXECUTE ON TYPE

Page 20: Oracle8 i 新特性

20 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型 ---- 行对象行对象CREATE TYPE name_typeCREATE TYPE name_type

AS OBJECTAS OBJECT

((

first_name VARCHAR2(30), first_name VARCHAR2(30),

last_name VARCHAR2(30)last_name VARCHAR2(30)

) ;) ;

CREATE TABLE customers OF name_type;CREATE TABLE customers OF name_type;

SELECT REF(C) FROM customers c; SELECT REF(C) FROM customers c;

Page 21: Oracle8 i 新特性

21 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型 ---- 行对象行对象• 对象表的一行代表对象类型的一个实例对象表的一行代表对象类型的一个实例• 对象表的列对应于对象类型的属性对象表的列对应于对象类型的属性• 每一个实例有系统产生的唯一的每一个实例有系统产生的唯一的 OIDOID

– 对象对象 ID(OID)ID(OID) 是每一个行对象的唯一描述符是每一个行对象的唯一描述符 ,, 是全局是全局唯一的唯一的 ,, 并且自动索引并且自动索引– 但但 OIDOID 不用于定位数据不用于定位数据 , , 而而 ROWIDROWID 用于定位数据用于定位数据

• 包含包含 OIDOID 的对象实例可以被引用的对象实例可以被引用 ((REF)REF)

Page 22: Oracle8 i 新特性

22 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型 ---- 列对象列对象• 对象类型可以定义为列的数据类型对象类型可以定义为列的数据类型• 存储在列中的类型实例没有存储在列中的类型实例没有 OID,OID, 而且不能被引用而且不能被引用CREATE TABLE employees (CREATE TABLE employees (

custidcustid number,number,

invoice invoice varchar2(1),varchar2(1),

name name name_type,name_type,

addressaddressaddress_type);address_type);

Page 23: Oracle8 i 新特性

23 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型• 对象索引对象索引

– 索引列必须为基本类型索引列必须为基本类型• 构造数据构造数据• 对象属性和方法的引用对象属性和方法的引用

– 采用采用 .. 引用方式引用对象的属性和方法引用方式引用对象的属性和方法– 对象属性和方法的引用必须使用表的别名,而不能是实对象属性和方法的引用必须使用表的别名,而不能是实际的表名际的表名

INSERT INTO employees VALUES(1, ‘a’, name_type(‘Jone’,’Jackson’), address_type(‘s’,’c’,’z’));SELECT c.name.first_name, c.name.last_name FROM employees c;

Page 24: Oracle8 i 新特性

24 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型 ----REFREF 举例举例CREATE TYPE cust_type AS OBJECT (CREATE TYPE cust_type AS OBJECT (

custid custid number, number, invoiceinvoice varchar2(1), varchar2(1),namename name_type,name_type,addressaddress address_type ) ;address_type ) ;

CREATE TABLE customers of cust_typeCREATE TABLE customers of cust_type(custid PRIMARY KEY ) ;(custid PRIMARY KEY ) ;

为每行产生一个 OID

INSERT INTO customers VALUES (1, '1', name_type('Jone','Jackson'), address_type('st','ci','11'));SELECT REF(s) FROM customers s;

Page 25: Oracle8 i 新特性

25 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

CREATE TABLE orders (CREATE TABLE orders (orderid orderid number,number,orderdateorderdate date, date, statusstatus varchar2(4),varchar2(4),customercustomer REFREF cust_type,cust_type,qtyqty number,number,partnopartno number REFERENCES parts ) ;number REFERENCES parts ) ;

区别外码引用和 REF

对象类型对象类型 ----REFREF 举例举例

Page 26: Oracle8 i 新特性

26 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

• 对象引用对象引用 ((REF): REF): 是系统产生的用于定位是系统产生的用于定位 OIDOID 的值的值– REFREF 在引用表中存储被引用表内的在引用表中存储被引用表内的 OIDOID

– 是指向行对象的指针是指向行对象的指针 , , 易于实现表和表之间的联系,对象之易于实现表和表之间的联系,对象之间访问被引用的对象不再需要关系间访问被引用的对象不再需要关系 JOINJOIN

– 将对象表的表别名作为将对象表的表别名作为 REFREF 的参数可以取得的参数可以取得 REFREF 的值的值– 只能用于具有只能用于具有 OIDOID 的对象的对象– . . 用于对象引用用于对象引用

对象类型对象类型 ---- 对象引用对象引用 REFREF

Page 27: Oracle8 i 新特性

27 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

• INSERT INTO orders INSERT INTO orders SELECT 2, '7-10SELECT 2, '7-10 月月 -99', '2222', -99', '2222', ref(c), 1000ref(c), 1000 FROM customers c WHERE c.custid=1;FROM customers c WHERE c.custid=1;

• UPDATE orders o UPDATE orders o SET o.customer = SET o.customer =

( SELECT REF( c ) FROM customers c( SELECT REF( c ) FROM customers cWHERE custid = 2 )WHERE custid = 2 )

WHERE o.orderid = 1 ;WHERE o.orderid = 1 ;• SELECT o.customer SELECT o.customer

FROM orders oFROM orders oWHERE o.orderid = 1;WHERE o.orderid = 1;

对象类型 --REF 举例

.name .first_name

Page 28: Oracle8 i 新特性

28 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

• DEREFDEREF

– 用于返回被引用对象中的数据用于返回被引用对象中的数据– 将包含将包含 REFREF 的对象表列作为阐述可以取得对象的数据的对象表列作为阐述可以取得对象的数据SELECT DEREF( o.customer )SELECT DEREF( o.customer )

FROM orders o WHERE orderid = 1 ;FROM orders o WHERE orderid = 1 ;

对象类型对象类型 ---- 对象引用对象引用 REFREF

Page 29: Oracle8 i 新特性

29 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型 ----REFREF 简化了代码简化了代码• 在关系设计中在关系设计中 , , 开发人员必须使用联合开发人员必须使用联合 ((JOIN)JOIN)

SELECT o.orderid, c.nameSELECT o.orderid, c.nameFROM orders o, customers cFROM orders o, customers cWHERE c.custid = o.custid and c.custid =1;WHERE c.custid = o.custid and c.custid =1;

• 服务器管理对象间的关系服务器管理对象间的关系 ,, 用户只需通过属性进行引用用户只需通过属性进行引用SELECT o.orderid, o.customer.name, o.statusSELECT o.orderid, o.customer.name, o.status

FROM orders oFROM orders oWHERE o.customer.custid = 1;WHERE o.customer.custid = 1;

Page 30: Oracle8 i 新特性

30 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型 ----VALUEVALUE• VALUEVALUE 用于从对象表中取得对象实例用于从对象表中取得对象实例• 取得的对象实例必须被相同类型的对象变量接收取得的对象实例必须被相同类型的对象变量接收• 不使用不使用 VALUE, SELECTVALUE, SELECT 只能返回一个对象的各个列值只能返回一个对象的各个列值DECLAREDECLARE

cust_variable cust_type;cust_variable cust_type;

BEGINBEGIN

SELECT VALUE( c )SELECT VALUE( c )

INTO cust_variableINTO cust_variable

FROM customers cFROM customers c

WHERE custid = 789 ;WHERE custid = 789 ;

END;END;

VALUE 使用对象表中的实例初始化 PL/SQL 变量

Page 31: Oracle8 i 新特性

31 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型 ---- 方法方法• 方法是一个过程或函数方法是一个过程或函数 , , 是对象类型定义的一部分是对象类型定义的一部分• 对象类型总是有对象类型总是有 11 到多个方法到多个方法• 方法的种类方法的种类

– 成员方法 成员方法 ((member)member)

– 构造子方法 构造子方法 ((constructor)constructor)

– MAPMAP或或 ORDERORDER 方法方法

Page 32: Oracle8 i 新特性

32 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型 ---- 成员方法成员方法• 用户编写的用于操纵对象类型属性的子程序用户编写的用于操纵对象类型属性的子程序• 成员方法可以带输入输出参数成员方法可以带输入输出参数• 对象类型有对象类型有 00 到多个成员方法到多个成员方法• 执行方法的格式为执行方法的格式为 ::

– << 对象名称对象名称 >.<>.< 方法名称方法名称 >([>([ 参数列表参数列表 ])])

CREATE TYPE employee_type AS OBJECT(empno number,ename varchar2(30),hiredate date,MEMBER FUNCTION days_at_company RETURN number);

Page 33: Oracle8 i 新特性

33 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型 ---- 成员方法成员方法CREATE TYPE BODY employee_type ASCREATE TYPE BODY employee_type AS

MEMBER FUNCTION days_at_companyMEMBER FUNCTION days_at_company RETURN NUMBER RETURN NUMBER

IS IS BEGINBEGIN RETURN floor(sysdate - hiredate);RETURN floor(sysdate - hiredate); END;END;

END;END;

CREATE TABLE employees OF employee_type;CREATE TABLE employees OF employee_type;

INSERT INTO employees VALUES (1, ‘Jone’, ‘10-10INSERT INTO employees VALUES (1, ‘Jone’, ‘10-10 月月 -89’);-89’);select c.days_at_company() from employees c where c.id=1;select c.days_at_company() from employees c where c.id=1;

Page 34: Oracle8 i 新特性

34 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型 ---- 执行方法执行方法 (( 例例 ))

DECLAREDECLAREemp_variableemp_variable employee_type;employee_type;days_employeddays_employed number;number;

BEGINBEGINSELECT VALUE( e )SELECT VALUE( e )

INTO emp_variableINTO emp_variableFROM employees eFROM employees eWHERE e.empno = 801 ;WHERE e.empno = 801 ;

days_employed := emp_variable.days_at_company() ;days_employed := emp_variable.days_at_company() ;dbms_output.put_line(‘Days employed: ‘ ||dbms_output.put_line(‘Days employed: ‘ ||

to_char(days_employed)) ;to_char(days_employed)) ;END;END;

Page 35: Oracle8 i 新特性

35 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型 ---- 构造子方法构造子方法• 构造子方法初始化一个对象类型的实例构造子方法初始化一个对象类型的实例 , , 并将它的属性并将它的属性赋值赋值• 每一个对象类型自动包含一个构造子方法每一个对象类型自动包含一个构造子方法• 构造子方法的名称采用对象名构造子方法的名称采用对象名• 构造子方法的参数即对象类型的所有属性构造子方法的参数即对象类型的所有属性CREATE TYPE name_type AS OBJECTCREATE TYPE name_type AS OBJECT

((

first_namefirst_name VARCHAR2(30),VARCHAR2(30),

last_namelast_name VARCHAR2(30)VARCHAR2(30)

););

Page 36: Oracle8 i 新特性

36 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型 ---- 构造子方法构造子方法CREATE TYPE address_type AS OBJECT CREATE TYPE address_type AS OBJECT

((

streetstreet VARCHAR2(30), VARCHAR2(30),

citycity VARCHAR2(20),VARCHAR2(20),

zipzip VARCHAR2(7) VARCHAR2(7)

););

Page 37: Oracle8 i 新特性

37 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型 ---- 使用构造子方法使用构造子方法CREATE TYPE cust_type AS OBJECT CREATE TYPE cust_type AS OBJECT ((

custidcustid number,number,invoiceinvoice varchar2(1),varchar2(1),namename name_type,name_type,addressaddressaddress_type address_type

););

CREATE TABLE customers of cust_typeCREATE TABLE customers of cust_type(custid(custid PRIMARY KEY);PRIMARY KEY);

INSERT INTO customers INSERT INTO customers VALUES ( 1, N, name_type(‘Jim’,’ Smith’), VALUES ( 1, N, name_type(‘Jim’,’ Smith’), address_type(‘Main Street’, ‘New York’, ‘10010’) );address_type(‘Main Street’, ‘New York’, ‘10010’) );

构造子初始化对象类型 , 为各个属性赋值

Page 38: Oracle8 i 新特性

38 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型 ---- 排序和比较对象排序和比较对象• 传统的数据类型传统的数据类型 (( 如如 : : number, date)number, date) 易于排序和比较易于排序和比较• 对象类型由于结构复杂对象类型由于结构复杂 , , 必须借助方法实现排序和比较必须借助方法实现排序和比较

– MAPMAP 方法将对象类型转换为传统数据类型方法将对象类型转换为传统数据类型– ORDERORDER 方法比较两个对象实例方法比较两个对象实例 , , 返回返回 1, 0, -11, 0, -1

– 一个对象类型只能有一个一个对象类型只能有一个 MAPMAP 方法或一个方法或一个 ORDERORDER 方法方法

Page 39: Oracle8 i 新特性

39 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

• MAPMAP 方法方法– 方法返回一个传统数据类型用于排序方法返回一个传统数据类型用于排序– 没有输入参数没有输入参数 (( 有一个隐含参数有一个隐含参数 ))

– 被隐含调用被隐含调用 , , 以决定下面表达式的结果以决定下面表达式的结果• 相等 相等 , , 小于小于 , , 大于的比较大于的比较• BETWEEN BETWEEN 和 和 ININ 的判断的判断• ORDER BY, GROUP BY ORDER BY, GROUP BY 子句子句• UNIQUEUNIQUE和和 PRIMARY KEYPRIMARY KEY 约束约束

对象类型对象类型 ---- 排序和比较对象排序和比较对象

Page 40: Oracle8 i 新特性

40 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

CREATE TYPE name_type AS OBJECT (CREATE TYPE name_type AS OBJECT (first_namefirst_name varchar2(30),varchar2(30),last_namelast_name varchar2(30),varchar2(30),

MAP MEMBER FUNCTION name_mapMAP MEMBER FUNCTION name_mapRETURN varchar2 );RETURN varchar2 );

CREATE TYPE BODY name_type ASCREATE TYPE BODY name_type ASMAP MEMBER FUNCTION name_mapMAP MEMBER FUNCTION name_map

RETURN varchar2 ISRETURN varchar2 IS BEGIN BEGIN

RETURN last_name || first_name;RETURN last_name || first_name; END; END; END;END;

任何基于 name_type 类型定义的表按名称的拼接串作为排序和比较的依据

Page 41: Oracle8 i 新特性

41 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

create table customerscreate table customers (custid number primary key, name name_type);(custid number primary key, name name_type); insert into customers values insert into customers values (1, name_type('Mike','Jackson'));(1, name_type('Mike','Jackson')); insert into customers valuesinsert into customers values (2, name_type('Alice','Smith'));(2, name_type('Alice','Smith'));

SELECT c.custid FROM customers cORDER BY c.name ;

对象类型对象类型 ---- 排序和比较对象排序和比较对象

MAP 方法隐含调用

Page 42: Oracle8 i 新特性

42 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象类型对象类型 ---- 排序和比较对象排序和比较对象• ORDERORDER 方法方法

– 决定类型实例的序列关系决定类型实例的序列关系– 有一个参数有一个参数 (( 外加一个隐含的参数外加一个隐含的参数 ))

– 返回一个整数返回一个整数• 如果当前对象比比较对象小如果当前对象比比较对象小 , , 返回 返回 -1-1• 如果当前对象与比较对象相等如果当前对象与比较对象相等 , , 返回 返回 00• 如果当前对象比比较对象大如果当前对象比比较对象大 , , 返回 返回 11

Page 43: Oracle8 i 新特性

44 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

1.4 1.4 收集类型收集类型• 实现一对多关系的模型化实现一对多关系的模型化• 在关系设计中只能通过联接在关系设计中只能通过联接 ((JOIN)JOIN) 实现表的关联实现表的关联 , , 将导致将导致复杂的运算复杂的运算• 在对象设计中可以通过收集实现对象类型的关联在对象设计中可以通过收集实现对象类型的关联 ((嵌套表嵌套表 ), ), 定义一次定义一次 ,, 使用多次使用多次• 排序或不排序的收集类型排序或不排序的收集类型

– 数组 数组 ((Arrays Arrays 排序的收集排序的收集 ))

– 嵌套表 嵌套表 (( 不排序的收集不排序的收集 ))

Page 44: Oracle8 i 新特性

45 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

收集类型收集类型 ---- 数组数组• 数组数组

– 支持有序的一对多的关系支持有序的一对多的关系– 数组元素的类型数组元素的类型 : : 基本类型或对象类型基本类型或对象类型– 变长的数组变长的数组 : : VARRAYVARRAY

• 元素具有相同类型元素具有相同类型• 可以得到可以得到 VARRAYVARRAY 中当前的元素总数中当前的元素总数• 应指定最大容量应指定最大容量• 元素不能为嵌套表或元素不能为嵌套表或 VARRAYVARRAY

Page 45: Oracle8 i 新特性

46 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

CREATE TYPE phone_number_type AS OBJECT CREATE TYPE phone_number_type AS OBJECT

((

line_codeline_code VARCHAR2(10),VARCHAR2(10),

phone_numberphone_number VARCHAR2(40)VARCHAR2(40)

););

CREATE TYPE phone_list_type AS VARRAY(7) OF phone_number_type;CREATE TYPE phone_list_type AS VARRAY(7) OF phone_number_type;

CREATE TYPE customer_type AS OBJECT CREATE TYPE customer_type AS OBJECT

((

custidcustid NUMBER, NUMBER,

namename VARCHAR2(50), VARCHAR2(50),

addressaddress address_type, address_type,

contactcontact VARCHAR2(50),VARCHAR2(50),

phone_numsphone_nums phone_list_type,phone_list_type,

MEMBER FUNCTIONMEMBER FUNCTION

add_phone(new_phone phone_number_type)add_phone(new_phone phone_number_type)

RETURN phone_list_type, RETURN phone_list_type,

) ;) ;

Page 46: Oracle8 i 新特性

47 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

CREATE TYPE BODY customer_type ASCREATE TYPE BODY customer_type AS

MEMBER FUNCTION MEMBER FUNCTION

add_phone (new_phone phone_number_type) add_phone (new_phone phone_number_type)

RETURN phone_list_type RETURN phone_list_type

ISIS

temp_array phone_list_type;temp_array phone_list_type;

counter INTEGER;counter INTEGER;

BEGINBEGIN

temp_array := SELF.phone_nums;temp_array := SELF.phone_nums;

counter := temp_array.COUNT +1;counter := temp_array.COUNT +1;

temp_array.EXTEND;temp_array.EXTEND;

temp_array(counter) := new_phone ;temp_array(counter) := new_phone ;

delete * from emp;delete * from emp;

commit;commit;

RETURN temp_array;RETURN temp_array;

END;END;

END;END;

CREATE TABLE customers OF customer_type;CREATE TABLE customers OF customer_type;

Page 47: Oracle8 i 新特性

48 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

收集类型收集类型 ---- 变长数组变长数组 (( 例例 ))INSERT INTO customers VALUESINSERT INTO customers VALUES

(8901, ‘Oracle Corp’, (8901, ‘Oracle Corp’, address_type(‘500 way’, ‘CA’, 94002), ‘Jim Smith’, address_type(‘500 way’, ‘CA’, 94002), ‘Jim Smith’,

phone_list_type(phone_list_type( phone_number_type(‘Phone’, ‘506-0000’), phone_number_type(‘Phone’, ‘506-0000’),

phone_number_type(‘Fax’, ‘506-0001’) )phone_number_type(‘Fax’, ‘506-0001’) ) ););

UPDATE customers c UPDATE customers c SET c.phone_nums = c.add_phone(phone_number_type(‘Cell’, SET c.phone_nums = c.add_phone(phone_number_type(‘Cell’, ‘506-9999’))‘506-9999’))WHERE c.custid = 8901;WHERE c.custid = 8901;

Page 48: Oracle8 i 新特性

49 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

收集类型收集类型 ---- 收集的方法收集的方法• 收集收集 ((collection)collection) 的方法的方法 : : 内置的函数和过程 内置的函数和过程

((见见 PL/SQLPL/SQL 手册手册 ))– EXISTS EXISTS – COUNT COUNT – LIMIT LIMIT – FIRST and LAST FIRST and LAST – PRIOR and NEXT PRIOR and NEXT – EXTEND EXTEND – TRIM TRIM – DELETE DELETE

Page 49: Oracle8 i 新特性

50 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

编译指令编译指令• 编译软件包中的函数或过程时编译软件包中的函数或过程时 , , 可以使用可以使用 PRAGMAPRAGMA 编译指令通编译指令通知知 PL/SQLPL/SQL 编译器禁止对表中的数据和过程中的变量读或修改编译器禁止对表中的数据和过程中的变量读或修改 , , 当出现违反情况时当出现违反情况时 , , 编译出错编译出错– 格式格式 :: PRAGMA RESTRICT_REFERENCES ( PRAGMA RESTRICT_REFERENCES ( function_name, WNDS [, WNPS] [, RNDS] [, function_name, WNDS [, WNPS] [, RNDS] [,

RNPS]); RNPS]); – WNDS ”WNDS ” 不允许写数据库”不允许写数据库”– RNDS “RNDS “ 不允许读数据库”不允许读数据库”– WNPS “WNPS “ 不允许写程序包” 不允许写程序包” – RNPS “RNPS “ 不允许读程序包不允许读程序包 , , 即不允许引用程序包变量即不允许引用程序包变量””

Page 50: Oracle8 i 新特性

51 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

收集类型收集类型 -- 嵌套表嵌套表• 嵌套表嵌套表

– 嵌套表是包含在其它表中的表嵌套表是包含在其它表中的表– 每一个嵌套表记录逻辑上是一个单独的表每一个嵌套表记录逻辑上是一个单独的表 , , 但物理上只但物理上只创建一个表存储各个嵌套表的所有记录创建一个表存储各个嵌套表的所有记录– 支持无序的一对多的关系支持无序的一对多的关系– 元素类型元素类型 : : 基本类型集或对象集基本类型集或对象集– 查询通过对主表的查询来完成查询通过对主表的查询来完成– 可以索引嵌套表的列可以索引嵌套表的列

Page 51: Oracle8 i 新特性

52 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

收集类型收集类型 ----嵌套表嵌套表 ((SQLSQL 例例 ))CREATE TYPE project_type AS OBJECT (CREATE TYPE project_type AS OBJECT (

pno NUMBER, pname VARCHAR2(30), budget NUMBER );pno NUMBER, pname VARCHAR2(30), budget NUMBER );

CREATE TYPE project_set_type AS TABLE OF project_type;CREATE TYPE project_set_type AS TABLE OF project_type;

CREATE TYPE dept_type AS OBJECT (CREATE TYPE dept_type AS OBJECT (dept_nodept_no NUMBER,NUMBER,dnamedname VARCHAR2(32),VARCHAR2(32),projectsprojects project_set_type );project_set_type );

CREATE TABLE depts OF dept_typeCREATE TABLE depts OF dept_typeNESTED TABLE projects STORE AS projects_store;NESTED TABLE projects STORE AS projects_store;

INSERT INTO depts INSERT INTO depts VALUES (838, ‘Finance’, project_set_type());VALUES (838, ‘Finance’, project_set_type());

Page 52: Oracle8 i 新特性

53 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

收集类型收集类型 ----嵌套表嵌套表 ((PL/SQLPL/SQL 例例 ))

DECLAREDECLARE

temp_project project_set_type;temp_project project_set_type;

BEGINBEGIN

SELECT projects INTO temp_projectSELECT projects INTO temp_project

FROM depts WHERE dept_no=838;FROM depts WHERE dept_no=838;

temp_project.TRIM;temp_project.TRIM;

UPDATE deptsUPDATE depts

SET projects = temp_projectSET projects = temp_project

WHERE dept_no = 838;WHERE dept_no = 838;

END;END;

Page 53: Oracle8 i 新特性

54 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

收集类型收集类型 ----嵌套表嵌套表 ((CASTCAST 例例 ))

• 将查询的结果将查询的结果 ((未命名的收集未命名的收集 )) 转换为嵌套表类型转换为嵌套表类型 (( 命名命名的收集的收集 ))CREATE TABLE project_loop OF project_setCREATE TABLE project_loop OF project_set

(pono PRIMARY KEY);(pono PRIMARY KEY);

INSERT INTO deptsINSERT INTO depts

VALUES (615, ‘Accounting’ VALUES (615, ‘Accounting’

CAST(MULTISET CAST(MULTISET

(SELECT pno, pname, budget(SELECT pno, pname, budget

FROM project_loop )FROM project_loop )

AS project_set_type ) );AS project_set_type ) );

Page 54: Oracle8 i 新特性

55 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

收集类型收集类型 ----嵌套表作为表嵌套表作为表INSERT INTOINSERT INTO

THE (SELECT projects FROM deptsTHE (SELECT projects FROM depts

WHERE dept_no = 615 )WHERE dept_no = 615 )

VALUES (876, ‘Month end close’, 8876 );VALUES (876, ‘Month end close’, 8876 );

SELECT pnameSELECT pname

FROM THE (SELECT projects FROM deptsFROM THE (SELECT projects FROM depts

WHERE dept_no=615);WHERE dept_no=615);

Page 55: Oracle8 i 新特性

56 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

DELETEDELETE

THE ( SELECT projects FROM depts THE ( SELECT projects FROM depts

WHERE dept_no=123 ) pWHERE dept_no=123 ) p

WHERE p.pno IN (789, 456)WHERE p.pno IN (789, 456)

UPDATEUPDATE

THE (SELECT projects FROM deptsTHE (SELECT projects FROM depts

WHERE dept_no = 615 ) projWHERE dept_no = 615 ) proj

SET proj.budget = proj.budget * 1.5SET proj.budget = proj.budget * 1.5

WHERE proj.pname = ‘Oracle8 Object Technology’;WHERE proj.pname = ‘Oracle8 Object Technology’;

收集类型收集类型 ----嵌套表作为表嵌套表作为表

Page 56: Oracle8 i 新特性

57 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

收集类型收集类型 ----嵌套表的存储嵌套表的存储• 从逻辑上每一行都是单独的一个嵌套表从逻辑上每一行都是单独的一个嵌套表 , , ORACLEORACLE 为嵌套表列构为嵌套表列构造一个物理表结构造一个物理表结构 , , 称为存储表称为存储表• 存储表的存储参数可以单独设置存储表的存储参数可以单独设置

嵌套表的索引嵌套表的索引• 在父表的嵌套表列自动创建唯一性索引在父表的嵌套表列自动创建唯一性索引 ((NESTED_TABLE_ID)NESTED_TABLE_ID)

• 在嵌套表上不自动创建索引在嵌套表上不自动创建索引• 为提高性能为提高性能 , , 建议在存储表的建议在存储表的 NESTED_TABLE_IDNESTED_TABLE_ID 列上创建一个列上创建一个索引索引

Page 57: Oracle8 i 新特性

58 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

变长数组与嵌套表的比较变长数组与嵌套表的比较• 变长数组变长数组

– 有序的收集有序的收集– 小于小于 44KK时在线存储时在线存储– 不支持索引不支持索引– 元素个数有上限元素个数有上限– 不支持不支持 SQLSQL 的增删改的增删改– 适用于小数据量和知道上适用于小数据量和知道上限的数据量限的数据量

• 嵌套表嵌套表– 有多个子集有多个子集 , , 无序无序– 不在线存储不在线存储– 支持索引支持索引– 无上限无上限– 支持支持 SQLSQL 的增删改的增删改– 适用于大数据量适用于大数据量

Page 58: Oracle8 i 新特性

59 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

收集的比较运算收集的比较运算• 收集如何比较收集如何比较

– 可以取到应用程序中可以取到应用程序中 , , 再进行比较再进行比较– 包含收集的对象类型可以通过包含收集的对象类型可以通过 MAPMAP或或 ORDERORDER 方法进方法进行比较行比较

• 收集不可以用在下列场合收集不可以用在下列场合– 索引列索引列– UNIQUE, PRIMARYUNIQUE, PRIMARY或或 FOREIGN KEYFOREIGN KEY 约束约束– 包含包含 DISTINCT, GROUP BY, ORDER BYDISTINCT, GROUP BY, ORDER BY 或集合运算或集合运算的的 SELECTSELECT 语句语句

– 比较运算符 比较运算符 (=, <=, >=, (=, <=, >=, IN, =ANYIN, =ANY 等等等等 ))

Page 59: Oracle8 i 新特性

60 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

1.6 1.6 对象视图对象视图• 对象视图是对关系视图的扩展对象视图是对关系视图的扩展• 对象视图将关系表中存储的数据对象化对象视图将关系表中存储的数据对象化• 提供访问关系数据的对象应用支持提供访问关系数据的对象应用支持• 对象视图可以修改对象视图可以修改• 视图可以基于关系数据或对象数据视图可以基于关系数据或对象数据• 视图可以返回一般的列或对象视图可以返回一般的列或对象• 对象视图有对象视图有 OID(OID( 象对象表一样象对象表一样 ))

– OIDOID 可以取自对象基表可以取自对象基表– 否则否则 , , OIDOID 必须是能够唯一标识基表一行的用户自定义必须是能够唯一标识基表一行的用户自定义关键字关键字

Page 60: Oracle8 i 新特性

61 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象视图对象视图 ---- 返回对象列的视图返回对象列的视图• CUST_VIEWCUST_VIEW 视图返回四列视图返回四列 , , 一列是对象一列是对象CREATE TABLE cust_tab (CREATE TABLE cust_tab (

cno NUMBER(6) PRIMARY KEY, name CHAR(45), cno NUMBER(6) PRIMARY KEY, name CHAR(45), street CHAR(50), city CHAR(20), state CHAR(2),street CHAR(50), city CHAR(20), state CHAR(2),zip NUMBER(5,0), credit NUMBER ) ;zip NUMBER(5,0), credit NUMBER ) ;

CREATE TYPE address_type AS OBJECT (CREATE TYPE address_type AS OBJECT (str CHAR(50), cty CHAR(20), str CHAR(50), cty CHAR(20), st CHAR(2), zip NUMBER(5, 0) );st CHAR(2), zip NUMBER(5, 0) );

CREATE VIEW cust_view( no, name, addr, cr) ASCREATE VIEW cust_view( no, name, addr, cr) ASSELECT cno, name, address_type(street, city, state, zip), creditSELECT cno, name, address_type(street, city, state, zip), creditFROM cust_tab;FROM cust_tab;

Page 61: Oracle8 i 新特性

62 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象视图对象视图 ---- 基于对象表基于对象表• 视图返回带有视图返回带有 OIDOID的的 CITY_ADDR_TYPECITY_ADDR_TYPE 对象对象 , , 这个这个

OIDOID 来自视图的基表来自视图的基表 ADDRESS_TABADDRESS_TAB

CREATE TABLE address_tab OF address_type;CREATE TABLE address_tab OF address_type;

CREATE TYPE city_addr_type AS OBJECT (CREATE TYPE city_addr_type AS OBJECT (city CHAR(20), state CHAR(2), zip NUMBER(5, 0));city CHAR(20), state CHAR(2), zip NUMBER(5, 0));

CREATE VIEW city_addr_view OF city_addr_type ASCREATE VIEW city_addr_view OF city_addr_type ASSELECT cty, st, zip FROM address_tab;SELECT cty, st, zip FROM address_tab;

Page 62: Oracle8 i 新特性

63 中 软中 软 CS&SCS&S 中软网络技术股份有限公司中软网络技术股份有限公司

CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.CS&S NETWORK TECHNOLOGY JOINT STOCK CO.,LTD.

对象视图的修改对象视图的修改• 来自对象类型属性的视图列自动可修改来自对象类型属性的视图列自动可修改• 可变数组和嵌套表列不可自动修改可变数组和嵌套表列不可自动修改• 不可自动修改的列可以通过使用不可自动修改的列可以通过使用 INSTEAD OF INSTEAD OF 触发器执行触发器执行修改操作修改操作

– 可以为所有视图编写可以为所有视图编写 INSTEAD OF INSTEAD OF 触发器触发器– 不执行原语句而执行代替的触发器不执行原语句而执行代替的触发器

CREATE TRIGGER emp_dept_deleteCREATE TRIGGER emp_dept_deleteINSTEAD OF DELETE on emp_dept_viewINSTEAD OF DELETE on emp_dept_viewFOR EACH ROWFOR EACH ROWBEGINBEGINdelete from emp where eno = :old.eno;delete from emp where eno = :old.eno;END;END;