比较数组和关联数组

简单数组和关联数组有多处不同。了解它们之间的差别可帮助您选择使用正确的数据类型。

下表重点说明数组与关联数组之间的差别:
表 1. 比较数组和关联数组
数组 关联数组
简单数组的最大基数是定义简单数组时定义的。对下标 N 指定值时,下标在数组的当前基数与 N 之间的元素被隐式初始化为 NULL。 声明关联数组变量时,没有用户指定的最大基数,也未初始化任何元素。最大基数受可用内存限制。
简单数组的下标数据类型必须是整数值。 关联数组的下标类型可以是一组受支持数据类型。
简单数组中的下标值必须是一组连续的整数值。 在关联数组中,下标值可以是稀疏的。
针对简单数组的 CREATE TYPE 语句不需要指定数组基数。例如,在以下语句中未指定任何基数:

CREATE TYPE simple AS INTEGER ARRAY[];
在关联数组的 CREATE TYPE 语句中,需要下标数据类型,但不需要指定数组基数。例如,在此语句中,下标数据类型的基数被指定为 INTEGER:
CREATE TYPE assoc AS INTEGER ARRAY[INTEGER];
对简单数组的第一次赋值会导致下标值在 1 与指定给数组的下标值之间的数组元素初始化。以下复合 SQL(编译型)语句包含简单数组变量的声明以对变量的赋值:
BEGIN
 DECLARE mySimpleA simple;

  SET mySimpleA[100] = 123;              

END

执行赋值语句后,mySimpleA 的基数为 100;下标值在 1 到 99 的元素被隐式初始化为 NULL。
对关联数组的第一次赋值导致具有单个下标值的单个元素初始化。以下复合 SQL(编译型)语句包含关联数组变量的声明以及对变量的赋值:
BEGIN
  DECLARE myAssocA assoc;

  SET myAssocA[100] = 123;
END
执行赋值语句后,数组的基数为 1。

示例