它是数据库中的一组数据项,在数据库的单个记录中多次出现,被称为记录数组。
通常,通过导入 COBOL 副本或 PL/I 包含文件中的数据定义来映射表和视图。副本或包含文件可以包括数组定义。Classic Data Architect 通过将尚未变成平面结构的数组定义转换为 BEGINLEVEL 和 ENDLEVEL 块中的语句来将这种定义映射到列中。然后,应用程序生成包含 BEGINLEVEL 语句的数据定义语言(DDL)。在数据服务器上运行 DDL 以创建用户表。
在查询数组数据时可以优化性能。如果要插入、更新或删除数组数据,或者对数组数据执行更改捕获,那么必须使结构变成平面结构。请参阅相关数组主题以了解有关使用数组数据的信息。
有关使用 COBOL 的信息,请参阅 Enterprise COBOL for z/OS Language Reference 和 Enterprise COBOL for z/OS Programming Guide。有关使用 PL/I 的信息,请参阅 WebSphere Developer for System z PL/I for Windows Language Reference 和 Enterprise PL/I for z/OS Programming Guide。
05 DEPENDENTS-ARRAY OCCURS 20 TIMES
该数组在源数据库记录中出现 20 次,无论职员有多少个家属都如此。
NULL IS 处理
数据服务器上的查询处理器在运行时将 NULL 数组实例作为 SQL ROW 候选者跳过。在家属数组示例中,如果职员有三个家属并且该数组出现 20 次,那么 17 个 NULL 数组实例不会在结果集中显示为行。
可以将 NULL IS 值包括在 DDL 中以根据比较值将给定数组实例标识为 NULL。比较值可通过下列方法标识 NULL 数组实例:
在以下 NULL IS ALL DDL 示例中,单字符 X 是比较值。如果数组实例中的每个字符都是 X,那么该数组实例为 NULL。
MAXOCCURS 20 NULL IS ALL X
除非记录数组的所有实例都为 NULL,否则该数组的 NULL 实例在结果集中不作为行返回。如果该数组的所有实例都为 NULL,那么经典联合会对记录中的非数组信息返回单行,并将数组数据项设置为 NULL。在家属数组示例中,职员没有任何家属。
05 NUMBER-OF-DEPENDENTS PIC 9(4) COMP. 05 DEPENDENTS-ARRAY OCCURS 1 TO 20 TIMES DEPENDING ON NUMBER-OF-DEPENDENTS.
5 NUMBER_OF_DEPENDENTS BIN FIXED(15), 5 DEPENDENTS_ARRAY DIM(N1 REFER(NUMBER_OF_DEPENDENTS)),
PL/I 中没有与 COBOL DEPENDING ON 子句等价的语法,因此数据服务器将根据数组偏移量、数组大小以及记录或段长度自动计算数组实例的数目。公式如下所示:
<Number-of-array-instances> = (<record-length> - 1 - <array-offset>)/<array-size>
实例数不出现在向导生成的 DDL 中。在目录中创建表定义之前,当数据服务器处理 DDL 并验证表信息时将计算实例数。
限制
不能映射基于嵌套的可变长度数组的表,也不能映射在可变长度数组后面包含固定列的表。这是因为可变长度数组结构后面的列不出现在可预测的偏移处。
“新建表”向导支持 PL/I REFER 构造,但具有下列限制:
上边界必须反映实际计数,并且仅当下边界为 1 时才包含实际计数。
如果 PL/I 解析器遇到的 REFER 子句太复杂以致无法处理,那么该解析器将忽略整个结构并且验证进程将显示与数组定义相关的错误。