在集合类型中,内部元素始终具有相同的数据类型,可以通过集合变量的唯一索引访问它的每个元素。语法格式如下。
创建集合变量,需要先定义集合类型,然后创建该类型的变量,或者使用%TYPE创建。
PL/SQL有3种集合类型。
(1)关联数组(Associative Array)。
(2)可变数组(Varray)。
(3)嵌套表(Nested Table)。
表3.1对3种集合类型进行了比较。
表3.1 三种集合类型比较
其中:
①元素数量。如果指定了元素数量,则该数量为集合中的最大元素数。如果未指定元素数,则集合中的最大元素数为索引类型的数量上限。
②密度。密集集合的元素之间没有间隙,第一个和最后一个元素之间的每个元素都必须已定义并具有一个值(该值可以为NULL,除非该元素具有NOT NULL约束)。稀疏集合的元素之间可以存在间隙。
③未初始化状态。空集合,一个没有元素的集合。要添加元素,需要调用集合的EXTEND方法;NULL集合,一个不存在的集合。要将NULL集合更改为存在的状态,必须通过将其设置为空或为其分配非空值来初始化它(通过调用相关构造函数)。无法通过直接调用EXTEND方法来初始化一个NULL集合。
④何处定义。PL/SQL块中定义的集合类型属于本地类型。它仅支持在块中使用,并且仅当块位于独立子程序或包子程序中时才会被存储在数据库中。包规范中定义的集合类型是公共类型。可以通过包名限定(package_name.type_name)从包外部引用它。它会一直存储在数据库中,直到删除包。在模式中定义的集合类型是独立类型,可以使用CREATE TYPE创建它。它存储在数据库中,直到使用DROP TYPE删除它。
⑤作为复合类型的元素:要成为复合类型的元素类型,集合类型必须是独立集合类型,即定义在模式中的集合类型。