11.7.1 SDBデータベース定義【SD FMB】
*ENTRY DICTIONARY文に指定するSDBデータベース定義について説明します。
- 〈この項の構成〉
(1) 機能
SDBデータベースの論理構造を定義します。
(2) 形式
項番 |
形式 |
---|---|
SCHEMA SDBデータベース名 |
|
DBTYPE SD FMB |
|
RECORD レコード型名 |
|
{レベル番号|ITEM} 構成要素名 |
|
〔{CHARACTER 長さ |XCHARACTER 長さ |PACKED 〔DECIMAL FIXED〕 整数部桁数〔,小数部桁数〕 |INTEGER |SMALLINT} |
|
TYPE データ種別1,データ種別2 |
|
〔OCCURS 繰り返し回数〕 |
|
〕… |
|
〔RECORDID レコード識別コード〕 |
|
… |
|
〔SET 親子集合型名 |
|
OWNER 親レコード型名 |
|
ORDER LAST |
|
MEMBER 子レコード型名 |
|
INSERTION AUTOMATIC |
|
RETENTION FIXED |
|
〔SETOPTION |
|
〔OCCURRENCE NUMBER 一連番号の最大値 |
|
〔WARNING {一連番号使用比率1 〔,一連番号使用比率2 〔,一連番号使用比率3〕〕|0}〕 |
|
〔REUSE YES〕 〕 |
|
〕 〕… |
|
〔SDBOPTION |
|
〔OCCURRENCE WARNING {一連番号使用比率1 〔,一連番号使用比率2 〔,一連番号使用比率3〕〕|0}〕 |
|
〕 |
|
END SCHEMA |
(3) 定義句の指定順序
SDBデータベース定義の定義句の指定順序には,次に示す規則があります。
-
必須の定義,または必須の定義と省略できる定義の間は,上記の形式で示す順序で指定してください。
-
RECORD句およびSET句の指定順序は,一筆書き順の規則に従ってください。一筆書き順の規則については,「図11-11 RECORD句およびSET句の指定順序(一筆書き順)の規則」を参照してください。
(4) オペランドの説明
SDBデータベース定義の各オペランドの指定内容を説明します。
(a) SCHEMA
- SCHEMA SDBデータベース名
-
〜<識別子>((1〜30バイト))
SDBデータベースのSDBデータベース名を指定します。
すでに使用しているSDBデータベース名は指定できません。
(b) DBTYPE
定義するSDBデータベースのSDBデータベース種別を指定します。
- DBTYPE SD FMB
-
SDBデータベース種別がSD FMBのSDBデータベースを定義する場合は,DBTYPE句にSD FMBを指定します。
SD FMBのSDBデータベースとは,階層構造を持つデータベースで,メインフレームのXDM/SDがサポートしている階層型モデルのデータベースに相当します。詳細については,「2.3.3 SDBデータベース」を参照してください。
- 注意事項
-
SDBデータベース種別が4V(4V FMBまたは4V AFM)のSDBデータベースとSD FMBのSDBデータベースをシステム内で混在して定義することはできません。混在させた場合,動作を保証しません。
(c) RECORD
- RECORD レコード型名
-
〜<識別子>((1〜30バイト))
レコード型名を指定します。
- 《規則》
-
-
レコード型名は,同一スキーマ内で一意になるように指定してください。
-
1つのSDBデータベース定義内で指定できるRECORD句は,1〜128個です。
-
(d) レベル番号,ITEM
- {レベル番号│ITEM} 構成要素名
-
構成要素に関する情報を指定します。1つのRECORD句内での構成要素の階層レベルを指定します。
-
すべての構成要素が基本項目の場合,ITEMを指定できます。
-
1つのレコード型内で,レベル番号とITEMは同時に指定できません。
指定方法の詳細については,「表11-71 ルートレコード型の構成要素の指定」〜「表11-73 子レコード(3階層以降)の構成要素の指定」を参照してください。
- レベル番号
-
〜<符号なし整数>((2〜49))
1つのRECORD句内での構成要素の階層レベルを指定します。
階層が深くなるに従ってレベル番号を増やすように指定してください。レベル番号は連続した値である必要はありません。
階層が浅くなるときは,すでに指定したレベル番号にしてください。
- ITEM
-
すべての構成要素が基本項目の場合に指定できます。
- 構成要素名
-
〜<識別子>((1〜30バイト))
構成要素名を指定します。
《規則》
-
構成要素名は,RECORD句内で一意にしてください。
-
OCCURS句を指定した場合,繰り返し回数分の構成要素をHiRDB/SDが生成します。このとき,次に示す形式に従った構成要素名が付けられます。この構成要素名の長さが31バイト以上になった場合,pdsdbdefコマンドがエラーになります。
構成要素名(nnnn1〔,nnnn2〔,nnnn3〔,nnnn4〕〕〕)
nnnn1〜nnnn4:0〜9で構成される4桁の文字列です。0001から繰り返し回数まで1ずつ増加します。
OCCURS句を指定した構成要素の下位の階層レベルの構成要素にもOCCURS句を指定した場合,下位の階層の構成要素の繰り返し回数がコンマ(,)で区切って付加されます。
-
RECORD句内に指定できる構成要素の合計長は最大30,000バイトです。また,RECORD句内に指定できる構成要素の個数は最大30,000個です。
なお,OCCURS句を指定した場合,繰り返し回数分生成された構成要素の長さと個数も含まれます。
-
各レコード型の最初の基本項目の構成要素のデータ種別1には,Kを指定してください。
-
上位レコードのキーの構成要素,および一連番号の構成要素は,下位レコードの構成要素として,データ型とデータ種別を同じように指定してください。
-
ユーザデータ(データ種別1,2(TYPE U,D))の構成要素は,幾つかの構成要素をまとめて,ユーザ任意の集団項目内に指定できます。
ユーザファイル通番(データ種別1,2(TYPE U,F))の構成要素は,集団項目内に指定できません。
-
-
(e) データ型
- {CHARACTER 長さ
-
│XCHARACTER 長さ
│PACKED 〔DECIMAL FIXED〕 整数部桁数〔,小数部桁数〕
│INTEGER
│SMALLINT}
構成要素のデータ型を指定します。構成要素に指定できるデータ型を次の表に示します。
表11‒68 構成要素に指定できるデータ型 データ種別
データ型
データ形式
文字列
CHARACTER
固定長文字列
16進形式の文字列
XCHARACTER
16進固定長文字列
数値
PACKED 〔DECIMAL FIXED〕
符号付きパック形式10進データ
INTEGER
整数(4バイトの2進形式)
SMALLINT
整数(2バイトの2進形式)
- CHARACTER 長さ
-
〜<符号なし整数>((1〜30,000))
文字列データの長さを指定します。
- XCHARACTER 長さ
-
〜<符号なし整数>((1〜30,000))
16進形式の文字列データの長さを指定します。
- PACKED 〔DECIMAL FIXED〕 整数部桁数〔,小数部桁数〕
-
整数部桁数
〜<符号なし整数>((0〜38))
小数部桁数
〜<符号なし整数>((0〜38))
符号付きパック形式の10進データの整数部桁数,および小数部桁数を指定します。
整数部桁数と小数部桁数の和は,1〜38になるようにしてください。
- INTEGER
-
値の範囲が-2,147,483,648〜2,147,483,647の整数を指定します。長さは指定できません。
- SMALLINT
-
値の範囲が-32,768〜32,767の整数を指定します。長さは指定できません。
- 《規則》
-
-
一連番号の構成要素には,必ずINTEGERを指定してください。
-
基本項目の場合,データ型およびTYPE句を指定してください。
-
集団項目の場合,データ型およびTYPE句を省略してください。
-
(f) TYPE
- TYPE データ種別1,データ種別2
-
構成要素のデータ種別を指定します。
- データ種別1
-
〜<英字>((1バイト))
データベースキーかユーザデータかを区別するための種別を指定します。
- データ種別2
-
〜<英字>((1バイト))
データ種別1をさらに分類するための詳細な種別を指定します。
TYPE句で指定するデータ種別の指定値と意味を次の表に示します。
表11‒69 データ種別の指定値と意味 データ種別
指定値
意味
データ種別1
K
データベースキーで,次に該当する場合の構成要素
-
データベースキー
-
上位レコードの一連番号
-
自レコードの一連番号
U
ユーザデータ
データ種別2
A
RDエリア分割キーとする構成要素(SDBデータベースを横分割する際,レコードの格納RDエリアを決める構成要素)
N
自レコードの一連番号の構成要素
-
データ種別1がKの場合,一連番号属性あり
P
上位レコードの一連番号の構成要素
L
そのほかのデータベースキーの構成要素
F
ユーザファイル通番の構成要素
D
そのほかのユーザデータの構成要素
- 《規則》
-
指定順序と記述の規則
-
K,Uの順に,必要な種別を指定してください。
-
ユーザデータのあとにデータベースキーを指定することはできません。
そのほかの規則
-
データ種別1がKで,データ種別2がAの構成要素は,ルートレコード型と子レコード型で同一名称にしてください。
-
データ種別1がKで,データ種別2がAの構成要素は,データの長さを1〜30バイトの範囲で指定してください。
-
データ種別1がKで,データ種別2がAの構成要素のデータ型には,SMALLINTを指定できません。
-
RECORD句内では,データ種別1の指定に関係なく,データ種別2がAの構成要素は,それぞれ最大1つ指定できます。
-
データ種別1がKで,データ種別2がNの場合,一連番号属性があります。
-
上位レコードで一連番号属性ありの構成要素(データ種別1,2(K,N))は,下位レコードの構成要素で,データ種別1,2(K,P)を指定してください。
-
データ種別2がFの構成要素はレコード型内の最後の構成要素に1つだけ指定できます。
-
構成要素のデータ種別1とデータ種別2で,指定できる組み合わせを次の表に示します。
表11‒70 構成要素のデータ種別1とデータ種別2に指定できる組み合わせ データ種別1の指定
データ種別2に指定できる値
Kの場合
L
A
N
P
Uの場合
D
F※
-
ルートレコード型と子レコード型(2階層),および子レコード型(3階層以降)の構成要素の指定を次の表に示します。
指定順序や指定する個数,データ種別の組み合わせに誤りがある場合はエラーとなります。なお,1つの項番の中で基本項目と集団項目を複数指定できる場合の,指定順序は任意です。
表11‒71 ルートレコード型の構成要素の指定 指定順
項目
説明
データ種別
1
2
1
データベースキーの構成要素名
集団項目として指定します。
−
−
2
データベースキー1〜7
構成要素名
-
各データベースキーを,指定順1で指定した集団項目下の基本項目として,同じレベル番号で指定します。
-
集団項目とはしないでください。
K
L
個数
1〜7
A※
3
ユーザデータの構成要素名
ユーザデータの構成要素名を指定します。
−
−
U
D
F
表11‒72 子レコード型(2階層)の構成要素の指定 指定順
項目
説明
データ種別
1
2
1
データベースキー1〜7
構成要素名
-
ルートレコード型で指定したデータベースキーを,同じレベル番号の基本項目として指定します。
-
集団項目とはしないでください。
K
L
個数
1〜7
A※
2
一連番号
-
構成要素名を「DBKEY」とします。
-
基本項目として指定します。
K
N
3
ユーザデータの構成要素名
ユーザデータの構成要素名を指定します。
−
−
U
D
F
表11‒73 子レコード(3階層以降)の構成要素の指定 指定順
項目
説明
データ種別
1
2
1
データベースキー1〜7
構成要素名
-
上位の子レコード型で指定したデータベースキーを,同じレベル番号の基本項目として指定します。
-
集団項目とはしないでください。
K
L
個数
1〜7
A※
2
上位の一連番号
構成要素名
-
構成要素名は「DBKEY」以外とします。
-
上位レコード型で指定した一連番号を,基本項目として指定します。
K
P
個数
上位の子レコード型で指定した一連番号の構成要素数と同じになります(階層−2)。
3
一連番号
-
構成要素名を「DBKEY」とします。
-
基本項目として指定します。
K
N
4
ユーザデータの構成要素名
ユーザデータの構成要素名を指定します。
−
−
U
D
F
-
-
(g) OCCURS
- OCCURS 繰り返し回数
-
〜<符号なし整数>((1〜4,000))
構成要素の繰り返し回数を指定します。
OCCURS句を指定した場合,ここで指定した繰り返し回数分の構成要素が生成されます。
《規則》
-
OCCURS句は,ユーザデータの構成要素を指定した集団項目またはユーザデータ(データ種別1,2(TYPE U,D))である基本項目に指定できます。
-
OCCURS句を指定した構成要素の下位の構成要素にOCCURS句を指定する場合,OCCURS句は4次元まで指定できます。
(例)
03 UDATA1 OCCURS 2 ←1次元 05 UDATA1A OCCURS 3 ←2次元 07 UDATA1A1 CHARACTER 1 TYPE U,D 07 UDATA1A2 OCCURS 3 ←3次元 09 UDATA1A21 CHARACTER 1 TYPE U,D OCCURS 2 ←4次元 03 UDATA2 CHARACTER 76 TYPE U,D
-
OCCURS句を指定したときの構成要素名の生成例を次に示します。
(例)
-
(i) SET
- SET 親子集合型名
-
〜<識別子>((1〜30バイト))
親子集合型名を指定します。
- 《規則》
-
-
親子集合型名は,SDBデータベース定義内で一意にしてください。
-
ルートレコード型の数は1つにしてください。
-
親レコードから子レコードへの親子集合型をたどった場合に,元のレコードにたどり着くような親子集合型は定義できません。
-
1つのSDBデータベース定義内に指定できる親子集合型数は,0〜127個です。指定できる親子集合の階層は,1〜15です。
-
(j) OWNER
- OWNER 親レコード型名
-
〜<識別子>((1〜30バイト))
親子集合の親レコード型名を指定します。
- 《規則》
-
親レコード型名には,RECORD句で定義したレコード型名を指定してください。
(l) MEMBER
- MEMBER 子レコード型名
-
〜<識別子>((1〜30バイト))
親子集合内の子レコード型名を指定します。
- 《規則》
-
-
子レコード型名には,RECORD句で定義したレコード型名を指定してください。ただし,親子集合の親レコード型名と重複する子レコード型名は指定できません。
-
1つのSET句には,必ずMEMBER句を指定してください。
-
(m) INSERTION
- INSERTION AUTOMATIC
-
子レコードを親子集合に格納するときの挿入方法を指定します。
- AUTOMATIC
-
子レコードのレコード実現値がデータベースに格納されると,自動的に親レコードが属する親子集合型の親子集合実現値に格納されます。
(n) RETENTION
- RETENTION FIXED
-
子レコードを親子集合から切り離すまでの属性を指定します。
- FIXED
-
レコードが,ある親子集合の子レコードになったレコードは,データベースから削除されるまで,その親子集合の子レコードでなければなりません。
(p) OCCURRENCE NUMBER
- OCCURRENCE NUMBER 一連番号の最大値
-
〜<符号なし整数>((1〜2,147,483,647))≪2,147,483,647≫
一連番号の最大値を指定します。
- 《規則》
-
WARNING句またはREUSE句を指定する場合は,この句も指定する必要があります。
(q) WARNING
- WARNING {一連番号使用比率1〔,一連番号使用比率2〔,一連番号使用比率3〕〕|0}
-
一連番号の使用状況を監視する場合に,一連番号の使用比率を%単位で指定します。
- 一連番号使用比率1,一連番号使用比率2,一連番号使用比率3
-
〜<符号なし整数>((50〜99))
割り当て済み一連番号の割合が一連番号使用比率1〜3で指定した値に達した場合※に,メッセージを1回ずつ出力します。0を指定した場合は,割り当て済みの一連番号の監視をしません。
注※ 監視値=↑一連番号の最大値×一連番号使用比率n↑
この句とSDBOPTION句下のOCCURRENCE WARNING句の両方を指定した場合,この句での指定が有効となります。この場合,一連番号使用比率の指定値の個数が異なっていても,双方で補ってメッセージを出力することはありません。
この句を省略した場合,SDBOPTION句下のOCCURRENCE WARNING句の指定が有効となります。
一度に複数の一連番号使用比率に達した場合は,対応するメッセージがすべて出力されます。例えば,WARNING句の指定を60,70,80とした場合に,1回目のレコードの格納で75%に達した場合は,指定値60と70に対応するメッセージが出力されます。
一連番号の最大値が小さいと,重複指定でなくても内部的に重複指定と同じような扱いになる場合があります。例えば,OCCURRENCE NUMBER句が10,WARNING句が97,98,99と定義した場合,どの指定値も割り当て済み一連番号が10になった時点で,97(%)と98(%)と99(%)に対応するメッセージが出力されます。
一連番号の監視については,「5.25 一連番号の監視」を参照してください。
《規則》
-
一連番号使用比率を複数指定する場合,指定値が昇順になるように指定してください。
-
(r) REUSE
- REUSE YES
-
削除された一連番号を再利用します。
一連番号の再利用の例については,「図11-14 一連番号再利用の例」を参照してください。
《規則》
-
レコードを全件削除した場合は,REUSE句の指定に関係なく,最初から一連番号を振り直します。
-
常にREUSE YESが仮定されます(REUSE句を省略しても,REUSE YESが仮定されます)。
-
(t) OCCURRENCE WARNING
- OCCURRENCE WARNING {一連番号使用比率1〔,一連番号使用比率2〔,一連番号使用比率3〕〕
-
|0}
一連番号の使用状況を監視する場合に,一連番号の使用比率を%単位で指定します。
- 一連番号使用比率1,一連番号使用比率2,一連番号使用比率3
-
〜<符号なし整数>((50〜99))
割り当て済み一連番号の割合が,一連番号使用比率1〜3で指定した値に達した場合に,メッセージを1回ずつ出力します。0を指定した場合は,割り当て済み一連番号の監視はしません。
この指定はすべての子レコード型に対して有効となりますが,SETOPTION句下でWARNING句を指定した場合は,SETOPTION句下のWARNING句の指定が有効となります。この場合,一連番号使用比率の指定値の個数が異なっても,双方で補ってメッセージを出力することはありません。
一連番号の監視については,「5.25 一連番号の監視」を参照してください。
《規則》
-
この句の指定を省略した場合,一連番号使用比率1には80が,一連番号使用比率2には90が,一連番号使用比率3には95が仮定されます。
-
ルートレコード型だけを定義している場合は,このオペランドを指定できません。
上記以外の規則については,SETOPTION句下の「11.7.1(4)(q) WARNING」の規則を参照してください。
-