概述
分类
用户自定义类型(User Defined Type,UDT)可分为:结构类型、数组类型、嵌套表类型,三者创建或声明类型时的区别如下表所示。
分类 | 成员/元素 | 父类 | 构造函数 | 指定容量 | 方法 |
---|---|---|---|---|---|
结构类型(OBJECT) | 有 | 有 | 有 | 否 | 有 |
数组类型(VARRAY) | 有 | 无 | 有 | 是 | 无 |
嵌套表类型(TABLE) | 有 | 无 | 有 | 否 | 无 |
特点
构造函数
在创建UDT时,为每个UDT隐式定义了一个构造函数。构造函数是系统提供的函数,用于在SQL语句或PL/SQL代码中构造类型值的实例。构造函数的名称是UDT的名称,参数是用户自定义类型的所有成员变量,返回值是该用户自定义类型。
说明:
结构类型的构造函数支持重载,可以通过
CONSTRUCTOR
关键字重新自定义零个或多个不同参数的构造函数,且自定义的构造函数优先级高于默认构造函数。
继承(子类和超类)
结构类型类型支持继承关系,被继承的类称为超类、基类或父类。子类在继承父类的属性和方法时,可以扩展自己的属性和方法。
比较和排序
- 仅支持同一个模式下的同个UDT对象ID的UDT数据比较。
- 仅支持UDT数据等值和不等值比较。
- 支持UDT数据
IS NULL
或IS NOT NULL
比较。 - PL/SQL支持表中数据与相同类型的数据等值和不等值比较。
- PL/SQL支持具有相同成员或元素类型的临时类型的数据比较。
- 不支持对UDT数据的排序,但若成员类型为基础类型,则支持成员值的排序。
赋值
- SQL支持初始化赋值、构造函数赋值和复制赋值。
- PL/SQL支持初始化赋值、构造函数赋值、成员赋值和复制赋值。
成员/元素
- 构造类型的数据:使用点号
.
访问对象的成员。例如有一个构造类型OBJ
,它有两个成员ID
、NAME
,我们可以用OBJ.ID
和OBJ.NAME
来进行访问。 - 集合类型的数据:使用索引访问集合中的元素。例如用
varr(1)
访问varr数组的第一个元素。
依赖
对象类型、可变数组类型和嵌套表类型作为独立对象类型被使用时,需要添加该类型与使用者的依赖关系。
转换函数
不支持UDT和其他类型的相互转换与强制转换。