现在的位置: 首页 > 数据库 > 正文

PL/SQL(Oracle)数组变量(复合数据类型)的使用总结

2017年07月29日 数据库 ⁄ 共 927字 暂无评论 ⁄ 阅读 386 次

数组的概念在Oracle的PL/SQL语言中是复合数据类型,PL/SQL有两种复合数据结构:记录和集合。记录由不同的域组成,集合由不同的元素组成。

一般来讲,记录是多维元素(多维数组,多列变量),只能存储一行多列数据不能存储多行多列数据,只能单行赋值,即一次只能赋一个值否则会报too_many_rows的异常;而集合是一维元素(一维数组,单列变量),可以一次性将多个值赋入而不会报too_many_rows的异常。

想使用多行多列数组则需要将记录和集合组合起来,先定义一个记录,再将集合声明成一个记录,再用bulk collect关键字批量赋值(DML操作时使用关键字forall),这样我们就可以得到一个类似的多维数组(PS.存储过程记录块执行时间可用dbms_utility.get_time)。

复合变量类型不是数据库中已经存在的数据类型,因此要先使用关键字type创建复合类型。复合数据类型创建后,需要将变量声明成此数据类型,才可以使用变量。

集合可分为三种类型:索引表(有index by)、嵌套表(无index by)和数组,三种类型的集合之间的差异,包括数据绑定、稀疏性(sparsity)、数据库中的存储能力都有不相同。

数据绑定:绑定涉及到集合中元素数量的限制,VARRAY集合中的元素的数量是有限,Index_by和嵌套表则是没有限制的。

稀疏性:稀疏性描述了集合的下标是否有间隔,索引表和嵌套表可以是稀疏的,VARRAY类型的集合则是紧密的,它的下标之间没有间隔。

存储:索引表不能存储在数据库中,但嵌套表和VARRAY可以被存储在数据库中。存储在一个数据库中的嵌套表并不与表中的其它数据存放在同一个数据块中,它们实际上被存放在第二个表中。从数据库中取回的嵌套表也不保证元素的顺序。集合数据是离线存储的,所以嵌套表适合大型集合。

另外,在赋值时三种数据类型也有所不同。嵌套表和VARRAY要由构造函数初始化,不可直接赋值,如,不可直接v_varry(1):=666,要先v_varry:=type_varray(),然后v_varry(1):=666。

举例:

数组属性(复合数据类型方法):

数组

» 声明:本站文章源于个人经验总结或书籍、互联网转载,内容仅用于个人学习,请勿转载,否则后果自负!

给我留言

留言无头像?