声明集合变量

类型为 COLLECTION 、SET 、MULTISET 或 LIST 的本地变量可保留取自数据库的值的集合,您不能(使用 GLOBAL 关键字)或使用缺省值将集合变量定义为全局(用于关键字)。

使用 COLLECTION 关键字声明的变量是可保留任何数据类型集合的未归类的(或类属)集合变量。

已声明为 SET 、MULTISET 或 LIST 类型的变量是已归类的集合变量。它只能保留指定的数据类型的集合。

当您定义已归类的集合变量的元素时,必须使用 NOT NULL 关键字,如下例所示:
DEFINE a SET ( INT NOT NULL );
        
        DEFINE b MULTISET ( ROW ( b1 INT,
        b2 CHAR(50)
        ) NOT NULL );
        
        DEFINE c LIST( SET( INTEGER NOT NULL ) NOT NULL );

通过变量 c,SET 中的 INTEGER 值和 LIST 中的 SET 值都被定义为 NOT NULL。

您可以使用嵌套的复杂类型定义集合变量以保留匹配的嵌套复杂类型数据。允许任何类型或深度的嵌套。您可以在集合类型中嵌套 ROW 类型,在 ROW 类型中嵌套集合类型,在集合类型中嵌套集合类型,在集合和 ROW 类型中嵌套 ROW 类型,等等。

如果您将某个变量声明为 COLLECTION 类型,并且在相同的语句块中被重新指定,则该变量获取各不相同的数据类型声明,如下例所示:
DEFINE a COLLECTION;
        LET a = setB;
        ...
        LET a = listC;

在此示例中,varA 是一个类属集合变量,它将其数据类型更改为当前指定的集合的数据类型。第一个 LET 语句使 varA 成为 SET 变量。第二个 LET 语句使 varA 成为 LIST 变量。