2.4.2 埋込み変数の宣言方法
DML中に記述する埋込み変数は,データ部の次のどちらかの節で宣言する必要があります。
-
作業場所節(WORKING-STORAGE SECTION)
-
連絡節(LINKAGE SECTION)
上記以外の節で宣言した変数は,埋込み変数として使用できません。
(1) 埋込み変数の宣言例
埋込み変数はレコード型,構成要素のデータ型に合わせて宣言します。埋込み変数の宣言例を次に示します。
- レコード型の定義
RECORD FMBDT_ROOT 2 DBKEY 3 KEYDATA1 XCHARACTER 1 TYPE K,L 2 CHR_L01 CHARACTER 1 TYPE U,D 2 CHR_L30 CHARACTER 30 TYPE U,D 2 XCHR_L01 XCHARACTER 1 TYPE U,D 2 XCHR_L30 XCHARACTER 30 TYPE U,D 2 PACK_38_0 PACKED 38,0 TYPE U,D 2 PACK_10_5 PACKED 10,5 TYPE U,D 2 PACK_0_38 PACKED 0,38 TYPE U,D 2 INT INTEGER TYPE U,D 2 SINT SMALLINT TYPE U,D RECORD FMBDT_CHILD 2 KEYDATA1 XCHARACTER 1 TYPE K,L 2 DBKEY INTEGER TYPE K,N 2 CHR_L01 CHARACTER 1 TYPE U,D 2 CHR_L30 CHARACTER 30 TYPE U,D 2 XCHR_L01 XCHARACTER 1 TYPE U,D 2 XCHR_L30 XCHARACTER 30 TYPE U,D 2 PACK_38_0 PACKED 38,0 TYPE U,D 2 PACK_10_5 PACKED 10,5 TYPE U,D 2 PACK_0_38 PACKED 0,38 TYPE U,D 2 INT INTEGER TYPE U,D 2 SINT SMALLINT TYPE U,D
- 埋込み変数の宣言例
WORKING-STORAGE SECTION. * 77 RECNAME PIC X(30) VALUE SPACE. ...1 77 RECLENG PIC S9(8) COMP VALUE ZERO. ...2 * 01 FMBDT_ROOT. ...3 02 PDBKEYRT. 03 PKEYDATA1 PIC X VALUE SPACE. 02 PCHR_L01 PIC X VALUE SPACE. 02 PCHR_L30 PIC X(30) VALUE SPACE. 02 PXCHR_L01 PIC X VALUE SPACE. 02 PXCHR_L30 PIC X(30) VALUE SPACE. 02 PPACK_38_0 PIC S9(38) COMP-3 VALUE 0. 02 PPACK_10_5 PIC S9(10)V9(5) COMP-3 VALUE 0. 02 PPACK_0_38 PIC SV9(38) COMP-3 VALUE 0. 02 PINT PIC S9(5) COMP VALUE 0. 02 PSINT PIC S9(1) COMP VALUE 0. * 01 FMBDT_CHILD. ...4 02 CKEYDATA1 PIC X VALUE SPACE. 02 CDBKEY PIC S9(8) COMP VALUE 0. 02 CCHR_L01 PIC X VALUE SPACE. 02 CCHR_L30 PIC X(30) VALUE SPACE. 02 CXCHR_L01 PIC X VALUE SPACE. 02 CXCHR_L30 PIC X(30) VALUE SPACE. 02 CPACK_38_0 PIC S9(38) COMP-3 VALUE 0. 02 CPACK_10_5 PIC S9(10)V9(5) COMP-3 VALUE 0. 02 CPACK_0_38 PIC SV9(38) COMP-3 VALUE 0. 02 CINT PIC S9(9) COMP VALUE 0. 02 CSINT PIC S9(4) COMP VALUE 0.
- [説明]
-
-
FETCH文,FIND文,またはGET文で操作したレコードのレコード名を受け取るための埋込み変数(RECNAME)を宣言します。
-
FETCH文,MODIFY文,STORE文,またはGET文で操作したレコードのレコード長を受け取るための埋込み変数(RECLENG)を宣言します。
-
レコード型FMBDT_ROOTとデータの受け渡しをする埋込み変数を宣言します。
-
レコード型FMBDT_CHILDとデータの受け渡しをする埋込み変数を宣言します。
-
COBOL言語のデータ記述項で埋込み変数を宣言します。データ記述項の指定形式および構文規則については,マニュアル「COBOL85 言語」の「データ記述項」を参照してください。
(2) DMLのデータ型とCOBOL言語のデータ記述項の対応
埋込み変数を宣言する際は,埋込み変数のデータ型に合わせてデータ記述項を記述してください。埋込み変数のデータ型は,埋込み変数を使用するDMLのデータ型によって決まります。DMLのデータ型とは,レコード型の各構成要素のデータ型のことです。DMLのデータ型によって埋込み変数のデータ型が決まり,埋込み変数のデータ型に従って埋込み変数を宣言する際のデータ記述項を記述します。
DMLのデータ型とCOBOL言語のデータ記述項の対応を次の表に示します。
DMLのデータ型 |
COBOL言語のデータ記述項 |
項目の種類 |
備考 |
---|---|---|---|
CHARACTER n |
L1 基本項目名 PICTURE X(n) 〔〔USAGE〕 DISPLAY〕 |
|
1≦n≦30,000 |
XCHARACTER n |
L1 基本項目名 PICTURE X(n) 〔〔USAGE〕 DISPLAY〕 |
|
1≦n≦30,000 |
PACKED 〔DECIMAL FIXED〕 m〔,n〕 |
|
|
1≦m+n≦38※1 |
SMALLINT |
L1 基本項目名 PICTURE S9(n) COMPUTATIONAL.※2 |
|
1≦n≦4 |
INTEGER |
L1 基本項目名 PICTURE S9(n) COMPUTATIONAL.※2 |
|
5≦n≦9 |
- (凡例)
-
L1:レベル番号01〜49,または77
- 注※1
-
HiRDB/SDで使用可能な範囲です。埋込み変数として使用可能な範囲は,COBOLコンパイラの仕様によって決まります。
- 注※2
-
2進項目をビッグエンディアン形式にするUAPの場合,データ型がINTEGERまたはSMALLINTの埋込み変数を宣言するときは,COMPUTATIONAL-5またはCOMP-5を指定してください。
2進項目をビッグエンディアン形式にするUAPを作成する場合の注意事項については,「2.13 2進項目をビッグエンディアン形式にするUAPを作成する場合の注意事項」を参照してください。
- 記述規則
-
埋込み変数を宣言する際のデータ記述項の句は,次の表に示す形式で記述してください。
表2‒4 データ記述項の句の記述形式 データ記述項の句の記述形式
左記以外の記述形式
PICTURE
PIC
COMPUTATIONAL
COMP
COMPUTATIONAL-n
COMP-n
9(n)
999....9(n個の9の並び)
X(n)
XXX....X(n個のXの並び)
OCCURS n TIMES
OCCURS 1 TO n TIMES
OCCURS 1 TO n
OCCURS n
(3) 複数のレコード型の構成要素に対応するデータ記述項
レコード型や,複数のレコード型の構成要素から成る集団項目に対応する埋込み変数は,対象となる各レコード型の構成要素に対応する基本項目を持った集団項目で宣言します。埋込み変数の宣言例を次の図に示します。
|
|
- 記述規則
-
-
埋込み変数に使用する集団項目は,この埋込み変数下の階層構造,基本項目のデータ型およびデータ長を,対応するレコード型,構成要素と一致させてください。なお,埋込み変数の長さに対応する,次のSDBデータベース定義については,HiRDB/SDがチェックします。
・レコード長
・シーケンシャルインデクスの構成要素の合計長
集団項目を構成する基本項目のデータ記述については,「2.1.3 データ部(DATA DIVISION)」の「埋込み変数のデータ記述項」を参照してください。
-
埋込み変数に使用する集団項目は,ほかの集団項目の下位項目であってもかまいません。
-
レベル番号,変数名は一致していなくてもかまいません。埋込み変数の下位項目については,変数名にFILLERを指定できます。
-
(4) 埋込み変数の規則
埋込み変数の規則を次に示します。
-
埋込み変数は,次のどちらかの節で宣言してください。
-
作業場所節(WORKING-STORAGE SECTION)
-
連絡節(LINKAGE SECTION)
上記以外の個所で宣言した変数を埋込み変数として使用しないでください。
-
-
プログラムを入れ子で記述している場合,外側のプログラムで宣言した埋込み変数を,内側のプログラムに記述したDMLで使用するときは,埋込み変数の宣言にGLOBAL句を指定してください。
-
レベル番号に66は指定できません。
-
レベル番号に88は指定できません。
-
埋込み変数のデータ記述項には,JUSTIFIED句およびBLANK WHEN ZERO句は指定できません。
-
SYNCHRONIZED句は独立項目(レベル番号77)にだけ指定できます。
-
FILLERは,埋込み変数として使用できません。ただし,下位項目にはFILLERを使用できます。
-
PICTURE句,USAGE句,およびOCCURS句は「表2-3 DMLのデータ型とCOBOL言語のデータ記述項の対応」のレコード型の構成要素のデータ型に対応するデータ記述に記載されている記述以外は指定できません。
-
PICTURE句を省略し,VALUE句だけを指定したデータ項目は,埋込み変数として使用できません。
-
REDEFINES句は,集団項目に従属する一つ目の下位項目には指定できません。REDEFINES句が指定された記述項が,そのほかのREDEFINES句の規則に従っているかはチェックされません。
-
埋込み変数の名称は,プログラム単位で一意にしてください。
-
埋込み変数にはOCCURS句を指定できません。ただし,埋込み変数の下位項目に指定することはできます。下位項目にOCCURS句を指定する場合,指定できる反復回数の最大値は4,000です。
-
COBOLの文の文法に誤りのある変数宣言は,埋込み変数に指定できません。
-
データ記述項に埋込み変数として指定できない項目は,指定できません。
-
集団項目を構成する基本項目のデータ長の合計は,レコード長の最大値(30,000バイト)を超えることはできません。
上記以外にも埋込み変数の規則があります。詳細については,マニュアル「HiRDB 構造型データベース機能」の「埋込み変数」を参照してください。