加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在Oracle中使用不同类型的PL / SQL集合的目的

发布时间:2020-12-12 13:13:41 所属栏目:百科 来源:网络整理
导读:在oracle中使用集合的主要目的是什么? 按表索引 嵌套表 可变大小的ARRAY 你能解释一下上述类型的收藏品之间的区别吗? 解决方法 让我们从嵌套表开始,它们是最常见的集合形式,因此代表了比较的有用基础. 嵌套表是一个变量,它可以包含多个实例,通常是数据库表
在oracle中使用集合的主要目的是什么?

>按表索引
>嵌套表
>可变大小的ARRAY

你能解释一下上述类型的收藏品之间的区别吗?

解决方法

让我们从嵌套表开始,它们是最常见的集合形式,因此代表了比较的有用基础.

嵌套表是一个变量,它可以包含多个实例,通常是数据库表中的记录.他们可能会这样声明:

type emp_nt is table of emp%rowtype;
emp_rec_nt emp_nt;

每当我们想要存储我们想要做同样事情的多个数据实例时,它们就很有用.经典示例使用BULK COLLECT存储多个记录:

select * 
bulk collect into emp_rec_nt
from employees;

这为我们提供了循环数据的来源;至关重要的是,我们可以向后和向前导航,甚至跳到结束或开始,这是我们用光标无法做到的事情.嵌套表可以是任何数据类型的集合,包括PL / SQL记录或用户定义类型等组合.

Index By表更好地称为(如文档所示)关联数组.这些是带索引的单个属性的简单集合.嵌套表也有索引,但它们的索引只是行数.对于关联数组,索引可以是有意义的,即源自数据值.因此,它们可用于缓存数据值以供以后使用.索引可以是一个数字,或者(从9iR2开始)一个非常有用的字符串.例如,这是一个工资关联数组,由员工标识符索引.

type emp_sal_aa is table of emp.sql%type
     index by emp.empno%type;
l_emp_sales emp_sal_aa;

请注意,我可以使用INDEX BY BINARY_INTEGER声明该数组,但更清楚的是使用%TYPE语法(自我记录代码).该数组的元素可以通过索引值标识,在本例中为EMPNO:

l_emp_sals(l_emp_no) := l_emp_sal;

除了缓存参考表或类似的查找值之外,关联数组的用例并不多.

变量数组只是嵌套表,对元素数量有预定义的限制.所以这个名字可能具有误导性:它们实际上是固定数组.我们用VArrays做的很少,我们不能用嵌套表做(除了限制元素的数量,我们很想做到这一点).它们被声明为:

type emp_va is varray(14) of emp%rowtype;
emp_rec_va emp_va;

我们可以使用批量收集来填充VArray ……

select * 
bulk collect into emp_rec_va
from employees;

但是我们必须确定查询最多将返回VArray声明中指定的元素数.否则SELECT将投掷ORA-22165.

变量数组没有已知的用例.好吧,这有点苛刻,但几乎所有的时候你都会使用嵌套表. VArrays相对于嵌套表的一大优势是它们保证了元素的顺序.因此,如果您必须按照插入的顺序获取元素,请使用VArray.

PL / SQL文档将整个章节用于集合. Find out more.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读