4 Object-Relational SQL
4.1 Introduction
- Departure from the relational model
4.2 Objects and Tables
4.2.1 定义新的数据类型
an object is defined in ORACLE with the Create Object Type statement
对应的删除就是
这些数据类型一经定义,便以持久形式保存在数据库系统中,用户可以像使用系统内置的数据类型一样使用这些复杂的数据类型,以此来扩充系统的数据类型
CREATE TYPE name_t AS OBJECT(
lname varchar(30),
fname varchar(30),
mi char(1)
);
创建表和创建对象的语句对比
4.2.2 对象类型的使用
如同使用普通的数据类型一样,可以用对象类型来定义表或者对象类型中的属性
- 使用所创建的对象类型来创建新类型
- 用于定义新类型中的属性(类型的嵌套)
- 使用所创建的对象类型来创建新的表
- 用于定义表中的属性
- 使用对象数据类型来直接创建一张表
- 新创建的’表‘ 的结构和对象类型的结构相同, 可以在创建的“表”中增加完整性约束定义
-
CREATE TABLE people OF person_t`( PRIMARY KEY(ssno) );
4.2.3 对象值的创建、查询与更新
4.2.3.1 对象值的创建
- 对象构造函数: typename ( argument, …)
- E: name_t (‘Nancy’, ‘Helen’, ‘Z’)
- 当我们树用插入操作在teachers中插入新的元组时, 会自动生成类型为name_t的对象值
- 返回对象取值的函数: value (…)
4.2.3.2 对象值的查询
4.2.3.3 对象值的更新
- 可以修改整个对象值
- 当表中的一个属性的值域是对象类型时,可以用“对象”值直接对该属性进行赋值
- 如果一张表是基于对象类型创建的,那么可以用对象值直接修改整个元组
- 可以修改对象中成员属性的值
2.4.3.4 对象的引用类型
2.4.3.4.1 定义类型之间的引用关系
2.4.3.4.2 创建含有引用类型的关系表
- 例:
- 第一步
- 第二步
- SCOPE FOR 子句用于限制REF属性的取值范围
- 为什么要有 Scope for 子句?
- 因为 scope for 子句保证了所有非空引用在创建时能够指向正确的表
- 第一步
流程:
2.4.3.4.3 引用关系查询
2.4.3.4.4 函数与谓词
2.4.3.4.5 类型的循环嵌套定义
2.4.3.4.6 其他约束
4.2.4 集合类型
4.2.4.1 表类型
table() 是转换函数,把嵌套表转换成一张表,以便于检索
4.2.4.2 数组类型
4.3 PL/SQL Procedures, UDFs, and Methods
4.2.5 Others