集合数据类型是数据库系统中一种复杂的数据,它将基础类型组合成的元素按照内部组织进行存储。用户在使用时,可以通过内部函数或位置坐标来获取所需的数据,也可以进行相应的修改,该数据类型在Oracle应用中被广泛使用。
Vastbase提供了一个实现集合数据类型的技术方案,用户可以在Vastbase数据库中使用Oracle的集合数据类型,实现对Oracle数据库的高度兼容性。本文将详细介绍其实现原理。
集合数据类型中,数据存储的基本单位被称为数据元素,每个数据元素都是同样的数据类型,用户可以通过每个元素的唯一索引来访问该元素。
集合数据类型的三种子类型:
associative array
VARRAY
nested table
这三种子类型的存储及访问逻辑基本一致,可使用相同的内部结构进行存储。结构的定义如下:
Node collection_type{
Type node_type
Range type_name
Int element_limit
Type element_type
Type index_type
}
*node_type为集合数据类型
通过该类型区分三种子类型
子类型的差异
Vastbase数据库中,集合数据类型的创建和使用,与Oracle有一定相似性。
总体技术框架如图所示:
2.1
Vastbase集合数据类型的创建
类型创建使用三种不同的语法规则来实现,并将三种语法保存到存储结构中,之后统一进行处理。
三种类型的创建语法实现如下:
1
associative array
associative array类型只能作用于存储过程(函数)内部,声明语法如下:
TYPE type_name IS TABLE OF element_type INDEX BY index_type
语法说明
type_name:声明的类型名,用于保存类型名
element_type:其中的元素类型,用于保存元素类型
index_type:索引类型(可选数字或字符串),用于保存索引类型
node_type:通过宏定义为associative array类型
element_limit:表示总元素数,在该类型中未指定,赋值为-1,用于标识
通过上述操作,可将associative array的类型定义转换为内部的存储形式。
2
VARRAY
VARRAY类型可以作用于存储过程(函数)内部或schema中,声明语法如下:
TYPE type_name IS VARRAY(element_limit)OF element_type
语法说明
type_name:为声明的类型名,用于保存类型名
element_type:为其中的元素类型,用于保存元素类型
element_limit:表示该类型中可以存储的总的元素数,表示总元素数
node_type:通过宏定义为VARRAY类型
index_type:用于保存索引类型,在该类型下默认为数字类型
通过上述操作,可将VARRAY的类型定义转换为内部存储的形式。
3
Nested table
Nested table类型可以作用于存储过程(函数)内部或schema中,声明语法如下:
TYPE type_name IS TABLE OF element_type
语法说明
type_name:为声明的类型名,用于保存类型名
element_type:为其中的元素类型,用于保存元素类型
node_type:通过宏定义为nested table类型
index_type:用于保存索引类型,此类型默认为数字
element_limit:表示总元素数,在该类型中未指定,赋值为-1,用于标识
通过上述操作,可将nested table的类型定义转换为内部存储的形式。
获得集合类型的存储结构之后,使用统一的处理入口,根据节点类型的不同分别进行处理。
对于associative array类型,因为其只作用于存储过程或函数,所以将信息保存到存储过程的变量栈中;对于其他类型,则将信息保存到数据库的系统表中。
2.2
Vastbase集合数据类型的使用过程
使用过程中,对于三种子类型而言,在Vastbase数据库中基本一致,显著的区别在于associative array类型支持字符串类型的位置索引。
在数据库中,可通过下述流程增加字符串索引的处理,流程如图所示:
集合类型的其余操作均与Vastbase数据库中数组类型的操作一致。
通过上述方案,Vastbase数据库可以有效支持集合数据类型,用户进行数据处理时更加得心应手。
并且能够对含有集合类型的Oracle数据库语句有效兼容、无需进行修改。简化了数据库迁移的应用改造难度,使得应用迁移过程更加平滑顺畅,为用户提供更加良好的使用体验。
领取专属 10元无门槛券
私享最新 技术干货