它是数据库中的一组数据项,在数据库的单个记录中多次出现,被称为记录数组。
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.
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. .......
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。