WebSphere 徽标 Classic Federation Server for z/OS V9.1
WebSphere 徽标 Classic Replication Server for z/OS V9.1
WebSphere 徽标 Classic Data Event Publisher for z/OS V9.1
WebSphere 徽标 Data Integration Classic Connector for z/OS V9.1


记录数组

它是数据库中的一组数据项,在数据库的单个记录中多次出现,被称为记录数组

通常,通过导入 COBOL 副本或 PL/I 包含文件中的数据定义来映射表和视图。副本或包含文件可以包括数组定义。Classic Data Architect 通过将尚未变成平面结构的数组定义转换为 BEGINLEVEL 和 ENDLEVEL 块中的语句来将这种定义映射到列中。然后,应用程序生成包含 BEGINLEVEL 语句的数据定义语言(DDL)。在数据服务器上运行 DDL 以创建用户表。

在查询数组数据时可以优化性能。如果要插入、更新或删除数组数据,或者对数组数据执行更改捕获,那么必须使结构变成平面结构。请参阅相关数组主题以了解有关使用数组数据的信息。

有关使用 COBOL 的信息,请参阅 Enterprise COBOL for z/OS Language ReferenceEnterprise COBOL for z/OS Programming Guide。有关使用 PL/I 的信息,请参阅 WebSphere Developer for System z PL/I for Windows Language ReferenceEnterprise PL/I for z/OS Programming Guide

固定长度数组

固定长度数组构造用于定义实例数不变的数组。例如,职员记录可以包括职员的家属信息(配偶和子女)。因为一个职员可以有多个家属,所以可通过指定 COBOL OCCURS 子句或 PL/I DIMENSION (DIM) 属性在职员记录中声明一组家属信息。以下 COBOL OCCURS 子句的示例定义一个固定长度数组。
    05 DEPENDENTS-ARRAY OCCURS 20 TIMES 

该数组在源数据库记录中出现 20 次,无论职员有多少个家属都如此。

NULL IS 处理

数据服务器上的查询处理器在运行时将 NULL 数组实例作为 SQL ROW 候选者跳过。在家属数组示例中,如果职员有三个家属并且该数组出现 20 次,那么 17 个 NULL 数组实例不会在结果集中显示为行。

可以将 NULL IS 值包括在 DDL 中以根据比较值将给定数组实例标识为 NULL。比较值可通过下列方法标识 NULL 数组实例:

  • 数组实例中的第一列的开头与比较值匹配(NULL IS null-value)。
  • 数组实例中的每个字符与单字符比较值匹配(NULL IS ALL null-value)。
  • 数组中的指定列的开头与比较值匹配(NULL IS column-name EQUAL null-value)。

在以下 NULL IS ALL DDL 示例中,单字符 X 是比较值。如果数组实例中的每个字符都是 X,那么该数组实例为 NULL。

    MAXOCCURS 20 NULL IS ALL X

除非记录数组的所有实例都为 NULL,否则该数组的 NULL 实例在结果集中不作为行返回。如果该数组的所有实例都为 NULL,那么经典联合会对记录中的非数组信息返回单行,并将数组数据项设置为 NULL。在家属数组示例中,职员没有任何家属。

可变长度数组

另一个常见记录数组构造用于定义可变长度数据。数组实例的数目取决于结构中数组前面的数据项的值,如 NUMBER-OF-DEPENDENTS。在 COBOL 中,数组声明如下所示:
    05 NUMBER-OF-DEPENDENTS PIC 9(4) COMP.
    05 DEPENDENTS-ARRAY OCCURS 1 TO 20 TIMES
       DEPENDING ON NUMBER-OF-DEPENDENTS.
下一个示例显示 PL/I 语言中的类似数组声明,它使用 REFER 属性来指向包含家属数的值的变量。
     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 构造,但具有下列限制:

  • REFER 子句必须出现在多维数组的第一维中。
  • 数组不能具有稍晚的同代,并且其父代不能具有同代。
  • REFER 子句必须位于上边界中,并且下边界必须是 1。

    上边界必须反映实际计数,并且仅当下边界为 1 时才包含实际计数。

如果 PL/I 解析器遇到的 REFER 子句太复杂以致无法处理,那么该解析器将忽略整个结构并且验证进程将显示与数组定义相关的错误。

相关概念
多个记录数组的性能注意事项
联合和更改捕获的记录数组定义
相关参考
数组定义示例
相关信息
映射用于经典联合的数据
映射用于更改捕获的数据


反馈

更新时间图标 最近一次更新时间:2007 年 7 月 11 日