我知道两者的基本区别和用法。但是,我正在寻找的答案是,为什么要引入VARRAY?
因为,我们可以使用NESTED TABLE做同样的事情,使用VARRAY可以做什么,而在某些情况下反之亦然。另外,我注意到有些人提到VARRAY商店元素内嵌。这是什么意思 ?任何人都可以解释两者的内部存储和处理吗?
答案 0 :(得分:2)
有两个主要的重要区别:
VARRAY声明中需要最大元素数(限制)。 嵌套的TABLE类型集合中无法限制。
VARRAY中可能的内联存储(嵌套的TABLE总是不在线)
如果集合类型在数据库中用作普通表列类型:
离线 - 嵌套表数据存储在不同的数据库段中 比主表行。 对于嵌套表段,类型为NESTED TABLE。
内联 - 存储在主表行内的嵌套行。
使用VARRAY CLOB。 数据库将在表列中存储少于+ -4000字节数据的LOB。 https://docs.oracle.com/cd/B28359_01/appdev.111/b28393/adlob_tables.htm#i1010742
答案 1 :(得分:1)
总结一下,您可以在以下情况下使用可变尺寸数组 a.k.a VARRAY :
例如,VARRAY声明为:
TYPE varray_emp IS VARRAY(14) OF emp%ROWTYPE;
emp_rec varray_emp;
所以,你看到 UPPER BOUND是固定的,在上面的例子中是14。
有关详细信息,请参阅documentation。
更新关于在数据库中存储VARRAY
引自上述文档链接:
每个varray都存储为单个对象,位于表的内部 它是一列(如果varray小于4KB)或在外面 表但仍在同一个表空间中(如果varray大于 4KB)。您必须更新或检索varray的所有元素 同时,这对于执行某些操作最合适 所有的元素一下子。但是你可能会发现存储它是不切实际的 并以这种方式检索大量元素。
关于在行存储:
varray通常存储在行中,即存储在同一个表空间中 作为其行中的其他数据。如果它足够大,Oracle 将其存储为BLOB
答案 2 :(得分:-1)
差异b / w嵌套表和varray:
将为嵌套表创建单独的表空间,这是另一个 比父表的表空间。 如果一个varray大小小于4 KB,它将存储在一个列的表中,否则它将存储在表外但在同一个表空间中。
可以对嵌套表的各个元素执行更新,删除 无法对Varray中的各个元素执行更新和删除操作。 有关更多说明,请查看以下链接。 http://docs.oracle.com/cd/B10501_01/appdev.920/a96624/05_colls.htm