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 OCCURS 子句在实际职员记录中声明一组从属信息。在以下示例中,将在记录中声明正好 20 个从属的一组信息。
01  EMPLOYEE-RECORD.
05 EMP-LAST-NAME               PIC X(20).
05 EMP-FIRST-NAME              PIC X(20).
05 EMPSSN                      PIC 9(9).
......
05 DEPENDENTS-ARRAY OCCURS 20 TIMES 
10 DEP-SSN                   PIC 9(9).
10 DEP-NAME                  PIC X(20).
10 DEP-DOB                   PIC 9(6).
10 DEP-RELATIONSHIP-TO-EMPL  PIC X.
另一个常见记录数组构造用于定义以可变方式重复出现的数据。在此示例中,该记录包含最多出现 20 次的数组数据。实际出现次数取决于其他某个数据项的值。在下列示例中,SSN 指的是社会保险号,这是在美国使用的一个国民标识。
01 EMPLOYEE-RECORD.
05 EMP-LAST-NAME PIC X(20).
05 EMP-FIRST-NAME PIC X(20).
05 EMP-SSN PIC 9(9).
.......
05 NUMBER-OF-DEPENDENTS PIC 9(4) COMP.
05 DEPENDENTS-ARRAY OCCURS 1 TO 20 TIMES
   DEPENDING ON NUMBER-OF-DEPENDENTS.
10 DEP-SSN PIC 9(9).
10 DEP-NAME PIC X(20).
10 DEP-DOB PIC 9(6).
10 DEP-GENDER PIC X.
.......
以下元数据语法示例映射先前 COBOL 草稿中的一个数据项子集。
CREATE TABLE CAC.EMPL .....
(
  EMP_SSN SOURCE DEFINITION
   DATAMAP OFFSET 40 LENGTH 9 DATATYPE C 
   USE AS CHAR(9),
  NUMBER_OF_DEPENDENTS SOURCE DEFINITION
   DATAMAP OFFSET 49 LENGTH 2 DATATYPE H 
   USE AS SMALLINT,  
 BEGINLEVEL 1 OFFSET 51 LENGTH 36 OCCURS 20
   DEPENDING ON COLUMN NUMBER_OF_DEPENDENTS,
  DEP_SSN SOURCE DEFINITION
   DATAMAP OFFSET 0 LENGTH 9 DATATYPE C
   USE AS CHAR(9),
  DEP_NAME SOURCE DEFINITION
   DATAMAP OFFSET 9 LENGTH 20 DATATYPE C
   USE AS CHAR(20),
 ENDLEVEL 1
)

该示例仅映射该职员的社会保险号字段、COBOL DEPENDING ON 变量、从属社会保险号字段及从属姓名字段。OCCURS 子句 DEPENDENTS-ARRAY 中的各项包含在语句的 BEGINLEVEL 或 ENDLEVEL 块中。语句块标识一组重复的数据项。将此映射从 COBOL 记录转换为 SQL 列时,经典联合会将 DEPENDENT-ARRAY 的每次出现与非数组数据项结合到一起以创建 SQL 行。在此情况下,数组数据项 DEP-SSN 与 DEP-NAME 每次出现时会伴有非数组数据项 EMP-SSN 与 NUMBER-OF-DEPENDENTS。

例如,如果数据库中对应职员社会保险号“123456789”的记录包含三个从属,则会对该特定记录返回三个不同的行。

以下查询返回以下结果集:

查询:

SELECT EMP_SSN, NUMBER_OF_DEPENDENTS, DEP_SSN, DEP_NAME FROM 
CAC.EMPL WHERE EMP_SSN = '123456789';

结果集:

EMP_SSN   NUMBER_OF_DEPENDENTS  DEP_SSN   DEP_NAME
123456789        3              111223333 Depen1
123456789        3              222334444 Depen2
123456789        3              333445555 Depen3

限制

经典联合不支持嵌套 OCCURS DEPENDING ON 定义。不能定义在 OCCURS DEPENDING ON 构造之后包含固定列的表。

包含固定出现次数的记录数组可包括 NULL IS 定义。作为 SQL ROW 候选项,这些数组出现次数在运行时将被忽略。NULL IS 定义标识数组本身的比较值或数组中的某列以将数组的实例标识为 NULL。除非记录数组的所有实例都为 NULL,否则该数组的 NULL 实例在结果集中不能返回为行。如果该数组的所有实例都为 NULL,则经典联合会对记录中的非数组信息返回单行,并将数组数据项设置为 NULL。

相关概念
occurs 处理
单个 COBOL 草稿中的多个记录数组


反馈

更新时间图标 最近一次更新时间:2006-12-15