Oracle 嵌套表和VARRAY之间的差异

Oracle 嵌套表和VARRAY之间的差异,oracle,plsql,nested-table,varray,Oracle,Plsql,Nested Table,Varray,我知道两者的基本区别和用途。但是,我要寻找的答案是,瓦雷到底为什么要介绍他 因为,我们可以使用嵌套表做同样的事情,而使用VARRAY做同样的事情是不可能的,反之亦然。此外,我还注意到一些人们提到VARRAY在线存储元素的地方。这是什么意思?有人能解释一下这两种方法的内部存储和处理吗?嵌套表和varray的区别: 将为其他嵌套表创建单独的表空间 大于父表的表空间。 如果varray大小小于4KB,则将其存储在作为列的表中,否则,它将存储在表外部,但存储在相同的表空间中。 可以对嵌套表的单个元素执行

我知道两者的基本区别和用途。但是,我要寻找的答案是,瓦雷到底为什么要介绍他


因为,我们可以使用嵌套表做同样的事情,而使用VARRAY做同样的事情是不可能的,反之亦然。此外,我还注意到一些人们提到VARRAY在线存储元素的地方。这是什么意思?有人能解释一下这两种方法的内部存储和处理吗?

嵌套表和varray的区别:

将为其他嵌套表创建单独的表空间 大于父表的表空间。 如果varray大小小于4KB,则将其存储在作为列的表中,否则,它将存储在表外部,但存储在相同的表空间中。
可以对嵌套表的单个元素执行更新、删除操作。
无法对Varray中的单个元素执行更新和删除。 欲了解更多信息,请点击下面的链接。


总而言之,在以下情况下,您可以使用一个可变大小数组a.k.a

  • 在填充之前,元素的数量是已知的
  • 元素需要按顺序访问
  • 元素的保序
例如,VARRAY声明为:

TYPE varray_emp IS VARRAY(14) OF emp%ROWTYPE;
emp_rec varray_emp;
因此,您可以看到上限是固定的,在上面的示例中是14

有关更多详细信息,请参阅

更新关于在数据库中存储VARRAY的信息

引用上述文档链接:

每个varray都作为单个对象存储在 它是一个列(如果varray小于4KB)或在 表,但仍在同一表空间中(如果varray大于 4KB)。必须同时更新或检索varray的所有元素 同一时间,这在对执行某些操作时最合适 一次完成所有元素。但是,你可能会发现存储数据是不切实际的 并以这种方式检索大量元素

关于在线存储:

varray通常以行的形式存储,也就是说,存储在同一个表空间中 作为其行中的其他数据。如果足够大,Oracle 将其存储为水滴


阅读更多关于

的信息有两个主要的重要区别:

  • VARRAY声明中需要最大元素数(限制)。 嵌套表类型集合中不可能有限制

  • VARRAY中可能的内联存储(嵌套表总是不符合要求)

    如果集合类型用作数据库中的正常表列类型:

    离线输出-嵌套表数据存储在不同的数据库段中 比主表行多。 对于嵌套表,段类型为嵌套表

    内联-存储在主表行中的嵌套行

    对于VARRAY,使用CLOB。 数据库将在表列中存储小于+-4000字节的LOB数据。


  • 请张贴你的报价来源。请参考链接。我知道你已经回答了上面。我实际上在寻找的是,它们是如何存储的?在线存储意味着什么?请参阅有关VARRAY存储和在线存储含义的更新。在线存储意味着,这些值像简单值一样存储,例如数字或(短)文本。大纲意味着,值存储在一个额外的表中,该表甚至可以在另一个表空间中,因此甚至可以在不同的物理硬盘上,尽管数据属于表中的单个记录。同意。但是,关于数字,它们在内部再次存储为不同大小的字符。而且,当行大小由于VARRAY而充分增加时,它的处理方式与BLOB相同。