当前位置: 首页 > 面试题库 >

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

丌官子安
2023-03-14
问题内容

在oracle中使用集合的主要目的是什么?

  1. Index by tables

  2. Nested tables

  3. Variable size 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记录或用户定义类型的组合。

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

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

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



 类似资料:
  • 我知道重载是在编译时决定的,但当我试图运行下面的示例时,它给出了我无法理解的结果 当我每次运行这个代码片段时,我都会得到“Collection”的输出,这意味着调用参数为Collection的classify方法。 请解释

  • 主要内容:索引表,示例,嵌套表,集合方法,集合异常在本章中,我们将讨论PL/SQL中的集合。集合是具有相同数据类型的有序元素组。 每个元素都由一个唯一的下标来表示它在集合中的位置。 PL/SQL提供了三种集合类型 - 索引表或关联数组 嵌套的表 可变大小的数组或类型 Oracle的每种类型的集合有以下特征 - 集合类型 元素个数 下标类型 密集或稀疏 在哪创建 是否为对象类型属性 关联数组(或索引表) 无界 字符串或整数 任意一种 只在PL/SQ

  • 本文向大家介绍Oracle DBMS中的PL / SQL块,包括了Oracle DBMS中的PL / SQL块的使用技巧和注意事项,需要的朋友参考一下 PL / SQL是一种块结构语言,即PL./SQL的代码以块的形式编写。PL / SQL还包含Oracle数据库的健壮性,安全性和可移植性。 PL / SQL的每个块均包含以下子部分- 声明- 本节包含所有需要在程序之前声明的项目,例如变量,子程序

  • 我需要对一个参数为PL/SQL表的过程进行JDBC调用。我正在尝试结构对象。但是我没有做正确的事情。我得到错误: ORA-04043:对象“斯科特”。“对象列表结构”不存在。 以下是代码片段: 参数“?”对于本程序,类型为: 我们非常感谢任何能让我们成功的见解谢谢

  • 问题内容: 长话短说,我建议讨论您在下面看到的代码。 运行时: Oracle 11编译器提高 “ PLS-00306:调用“ PIPE_TABLE”时出现错误的数量或类型的参数提示” “ PLS-00642:SQL语句中不允许使用本地集合类型” Oracle 12编译以下软件包时没有出现此类警告,但我们对运行时感到惊讶 当按原样执行匿名块时-一切都很好(我们可以在函数中传递一些行-不会影响) 现在

  • 问题内容: 我有一个带有收集类型的表。我要从表和某些列开始。我希望每个组的结果都包含一个集合,该集合包含该组中所有单个集合的独特联合。 例如, 我在寻找什么答案 我只在寻找可以插入上方“神奇的语法在这里”占位符的表达式。我知道我可以通过加入主表或以其他方式重组查询(或当然使用PL / SQL)来完成聚合。但是,我现在暂时避免这样的解决方案。 问题答案: 从我的回答改编成另一个问题。 Oracle安