データベースの単一レコード内に複数のオカレンスを持つ、データベースのデータ項目のグループを、レコード配列 といいます。
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 のレコードに 3 つの従属が含まれる場合、その特定のレコードに対して 3 つの個別の行が戻されます。
以下の照会は、以下の結果セットを戻します。
照会:
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 インスタンスは、配列の ALL インスタンスが NULL である場合を除き、行として結果セットに戻されません。 配列のすべてのインスタンスが NULL である場合、クラシック・フェデレーションは、非配列の情報に対して単一行をレコードに戻し、配列のデータ項目を NULL に設定します。