栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

嵌套表是一个变量,它可以容纳多个实例,通常是数据库表中的一条记录。可以这样声明它们:

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

每当我们要存储要针对其执行相同操作的多个数据实例时,它们就很有用。经典示例是使用BULK COLLECT存储多个记录:

select * bulk collect into emp_rec_ntfrom employees;

这为我们提供了一个可以循环的数据源。至关重要的是,我们可以向前和向后导航,甚至可以跳到结尾或开头,而这是我们无法使用游标完成的操作。嵌套表可以是任何数据类型的集合,包括诸如PL / SQL记录或用户定义类型的组合。

最好将“索引依据”表称为“关联数组”(就像文档一样)。这些是带有索引的单个属性的简单集合。嵌套表也有索引,但是它们的索引只是行数。对于关联数组,索引可以是有意义的,即从数据值中获取。因此,它们对于缓存数据值以供以后使用很有用。索引可以是数字,也可以是(自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;

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

变量数组只是嵌套表,对元素数有预定义的限制。因此,这个名称可能会误导您:它们实际上是固定数组。使用VArray几乎没有我们能做的事情,而使用嵌套表则无法做到(除了限制元素的数量外,我们极少希望这样做)。它们的声明如下:

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

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

select * bulk collect into emp_rec_vafrom employees;

但是,我们必须确保查询最多返回VArray声明中指定的元素数。否则,SELECT将抛出ORA-22165。

没有变量数组的已知用例。好的,这有点苛刻,但是几乎所有时候您都将使用嵌套表。与嵌套表相比,VArray的一大优势在于它们可以保证元素的顺序。因此,如果必须按插入元素的顺序取出元素,请使用VArray。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/517395.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号