VARRAY 真的只需要一个输入/输出操作就可以加载集合吗?
定义一个VARRAY 和一个集合类型:
CREATE TYPE test_varray AS VARRAY(3) OF NUMBER;
CREATE TYPE test_collection AS TABLE OF NUMBER;
然后您可以为每种数据类型创建类似的表:
CREATE TABLE test1 (
id NUMBER PRIMARY KEY,
array test_varray
);
CREATE TABLE test2 (
id NUMBER PRIMARY KEY,
array test_collection
) NESTED TABLE array STORE AS test2__array;
您可以将INSERT 作为单个语句添加到这些表中:
INSERT INTO test1 ( id, array ) VALUES ( 1, test_varray( 1.1, 1.2, 1.3 ) );
INSERT INTO test2 ( id, array ) VALUES ( 1, test_collection( 1.1, 1.2, 1.3 ) );
您可以将这些表中的SELECT 作为单个语句:
SELECT id, column_value FROM test1 CROSS JOIN TABLE( array );
SELECT id, column_value FROM test2 CROSS JOIN TABLE( array );
这两个输出:
身份证 | COLUMN_VALUE
-: | ------------:
1 | 1.1
1 | 1.2
1 | 1.3
db小提琴here
所以从INSERT/SELECT 操作的角度来看,它们在功能上是相似的。 Oracle Documentation - Understanding PL/SQL Collection Types主要解释了一些不同之处:
-
VARRAY 具有有限数量的元素并且总是密集的。
- 集合(嵌套表)可以包含无限数量的元素并且可以是稀疏的。