自由形式のデータ構造定義
データ構造は DCL-DS ステートメントで始まります。
DCL-DS ステートメントに LIKEDS キーワードも LIKEREC キーワードも 指定されていない場合、DCL-DS ステートメント の後にはゼロ個またはそれ以上のサブフィールドが続き、 その後に END-DS ステートメントが続きます。
DCL-DS ステートメント
最初のステートメントは DCL-DS で始まり、 その後にデータ構造の名前が続くか、データ構造に名前がない場合は *N が続き、 さらにその後にキーワードが続き、最後はセミコロンで終わります。
END-DS ステートメント
- LIKEDS または LIKEREC キーワードを使用して定義された データ構造には、END-DS は指定されません。
- END-DS の後にデータ構造の名前を続けることができます。
DCL-DS custInfo QUALIFIED; id INT(10); name VARCHAR(50); city VARCHAR(50); orders LIKEDS(order_t) DIM(100); numOrders INT(10); END-DS custInfo; - データ構造に名前がない場合、 END-DS はオペランドなしで指定する必要があります。
- サブフィールドがない場合、END-DS を DCL-DS ステートメント
の一部として、キーワードに続けて、セミコロンの前に指定できます。
この場合、END-DS の後にデータ構造の名前を指定することはできません。
DCL-DS prtDs LEN(132) END-DS;
外部記述データ構造
EXT キーワード
または EXTNAME キーワード
のいずれかを最初のキーワードとして指定します。
DCL-DS myfile EXT END-DS;
DCL-DS extds1 EXTNAME('MYFILE') END-DS;
EXT キーワードを指定する場合、
その後にあるキーワードの 1 つとして EXTNAME キーワードも指定できます。
DCL-DS extds2 EXT INZ(*EXTDFT) EXTNAME('MYFILE') END-DS;
プログラム状況データ構造 (PSDS)
PSDS を定義するには、PSDS キーワードを指定します。
*STATUS などの事前定義サブフィールドには、
データ・タイプ・キーワードの代わりに予約語を指定します。
DCL-DS pgm_stat PSDS;
status *STATUS;
routine *ROUTINE;
library CHAR(10) POS(81);
END-DS;
PSDS のすべての事前定義サブフィールドのリストについては、プログラム状況データ構造を参照してください。
ファイル情報データ構造 (INFDS)
INFDS の名前は、 ファイル定義の INFDS キーワード のパラメーターとして指定されます。
*STATUS などの事前定義サブフィールドには、
データ・タイプ・キーワードの代わりに予約語を指定します。
DCL-F myfile DISK(*EXT) INFDS(myfileInfo);
DCL-DS myfileInfo;
status *STATUS;
opcode *OPCODE;
msgid CHAR(7) POS(46);
END-DS;
INFDS のすべての事前定義サブフィールドのリストについては、ファイル・フィードバック情報を参照してください。
ファイル情報データ構造
DTAARA キーワードに *AUTO パラメーターを指定します。
DCL-DS dtaara_ds DTAARA(*AUTO) LEN(100);
name CHAR(10);
END-DS;
自由形式のデータ構造の例
- LIKEDS および LIKEREC を使用して定義されたデータ構造が、END-DS のない 1 つのステートメント
としてコーディングされています。
DCL-DS info LIKEDS(info_T); DCL-DS inputDs LIKEREC(custFmt : *INPUT); - 3 つのサブフィールドがあるデータ構造 cust_info。
END-DS ステートメントは名前なしで指定されています。
DCL-DS cust_info; id INT(10); name VARCHAR(25); startDate DATE(*ISO); END-DS; - 一部のサブフィールドの定義に DCL-SUBF が使用されているデータ構造。
- サブフィールド select は、自由形式演算内で使用を許可されている命令コードと同じ名前です。 このサブフィールドには DCL-SUBF が必要です。 表 1を参照してください。
- サブフィールド name は、命令コードと同じ名前ではないため、DCL-SUBF は不要です。
- サブフィールド address は、命令コードと同じ名前ではないため、 DCL-SUBF は必要ありませんが、あっても有効です。
DCL-DS *N; DCL-SUBF select CHAR(10); name CHAR(10); DCL-SUBF address CHAR(25); END-DS; - データ構造 order_info。
END-DS ステートメントが名前とともに指定されています。
DCL-DS order_info QUALIFIED; part LIKEDS(part_info_T); quantity INT(10); unit_price PACKED(9 : 2); discount PACKED(7 : 2); END-DS order_info; - 追加のサブフィールドがある外部記述データ構造。
DCL-DS cust_info EXTNAME('CUSTFILE'); num_orders INT(10); earliest_order DATE(*ISO); latest_order DATE(*ISO); END-DS; - 外部ファイル 'CUSTINFO' の名前と同じ名前の外部記述データ構造。
このデータ構造には、EXTFLD キーワードで示される外部サブフィールドがあります。
EXTFLD キーワードは、サブフィールド名が外部名と同じである場合はパラメーターなしで指定されます。
DCL-DS custInfo EXT; cust_name EXTFLD('CSTNAM'); id_no EXTFLD INZ(0); END-DS; - 名前の付いていないデータ構造。
DCL-DS *N; string CHAR(100); string_array CHAR(1) DIM(100) OVERLAY(string); END-DS;
