Hitachi

ノンストップデータベース HiRDB Version 10 構造型データベース機能


11.7.1 SDBデータベース定義【SD FMB】

*ENTRY DICTIONARY文に指定するSDBデータベース定義について説明します。

〈この項の構成〉

(1) 機能

SDBデータベースの論理構造を定義します。

(2) 形式

項番

形式

(a)

SCHEMA SDBデータベース名

(b)

DBTYPE SD FMB

(c)

 RECORD レコード型名

(d)

     {レベル番号|ITEM} 構成要素名

(e)

     〔{CHARACTER 長さ

        |XCHARACTER 長さ

        |PACKED 〔DECIMAL FIXED〕 整数部桁数〔,小数部桁数〕

        |INTEGER

        |SMALLINT}

(f)

       TYPE データ種別1,データ種別2

(g)

       〔OCCURS 繰り返し回数〕

      〕…

(h)

     〔RECORDID レコード識別コード〕

 …

(i)

 〔SET 親子集合型名

(j)

    OWNER 親レコード型名

(k)

    ORDER {LAST|SORTED DUPLICATES PROHIBITED}

(l)

    MEMBER 子レコード型名

(m)

    INSERTION AUTOMATIC

(n)

    RETENTION FIXED

(o)

    〔KEY {ASCENDING|DESCENDING} 構成要素名〔,構成要素名〕…〕

(p)

    〔SETOPTION

(q)

        〔OCCURRENCE NUMBER 一連番号の最大値

(r)

           〔WARNING {一連番号使用比率1

                  〔,一連番号使用比率2

                  〔,一連番号使用比率3〕〕|0}〕

(s)

           〔REUSE YES〕

         〕

     〕

  〕…

(t)

 〔SDBOPTION

(u)

    〔OCCURRENCE WARNING {一連番号使用比率1

                     〔,一連番号使用比率2

                     〔,一連番号使用比率3〕〕|0}〕

  〕

(v)

END SCHEMA

(3) 定義句の指定順序

SDBデータベース定義の定義句の指定順序には,次に示す規則があります。

(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

    注※

    データ種別1,2の指定がU,Fの場合,レコード型内で最後に指定してください。

  • ルートレコード型と子レコード型(2階層),および子レコード型(3階層以上)の構成要素の指定を次の表に示します。

    指定順序や指定する個数,データ種別の組み合わせに誤りがある場合はエラーとなります。なお,1つの項番の中で基本項目と集団項目を複数指定できる場合の,指定順序は任意です。

    表11‒71 ルートレコード型の構成要素の指定

    指定順

    項目

    説明

    データ種別

    1

    2

    1

    データベースキーの構成要素名

    集団項目として指定します。

    2

    データベースキー1〜7

    構成要素名

    • 各データベースキーを,指定順1で指定した集団項目下の基本項目として,同じレベル番号で指定します。

    • 集団項目とはしないでください。

    K

    L

    個数

    1〜7

    A

    3

    ユーザデータの構成要素名

    ユーザデータの構成要素名を指定します。

    U

    D

    F

    (凡例)

    −:該当しません。

    注※

    データベースキー1の構成要素にだけ指定できます。データベースキー1以外の構成要素には指定できません。

    表11‒72 子レコード型(2階層)の構成要素の指定

    指定順

    項目

    説明

    データ種別

    1

    2

    1

    データベースキー1〜7

    構成要素名

    • ルートレコード型で指定したデータベースキーを,同じレベル番号の基本項目として指定します。

    • 集団項目とはしないでください。

    K

    L

    個数

    1〜7

    A

    2

    一連番号

    • 構成要素名を「DBKEY」とします。

    • 基本項目として指定します。

    K

    N

    3

    ユーザデータの構成要素名

    ユーザデータの構成要素名を指定します。

    U

    D

    F

    (凡例)

    −:該当しません。

    注※

    データベースキー1の構成要素にだけ指定できます。データベースキー1以外の構成要素には指定できません。

    表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

    (凡例)

    −:該当しません。

    注※

    データベースキー1の構成要素にだけ指定できます。データベースキー1以外の構成要素には指定できません。

(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句を指定したときの構成要素名の生成例を次に示します。

    (例)

    [図データ]

(h) RECORDID

RECORDID レコード識別コード

〜X'<16進数字>'((1バイト))

レコード型を識別するコードとして,レコード識別コードを指定します。

《規則》
  • レコード識別コードを1バイトで指定します。

  • X'00'以外は重複できません。

(i) SET

SET 親子集合型名

〜<識別子>((1〜30バイト))

親子集合型名を指定します。

《規則》
  • 親子集合型名は,SDBデータベース定義内で一意にしてください。

  • ルートレコード型の数は1つにしてください。

  • 親レコードから子レコードへの親子集合型をたどった場合に,元のレコードにたどり着くような親子集合型は定義できません。

  • 1つのSDBデータベース定義内に指定できる親子集合型数は,0〜127個です。指定できる親子集合の階層は,1〜15です。

(j) OWNER

OWNER 親レコード型名

〜<識別子>((1〜30バイト))

親子集合の親レコード型名を指定します。

《規則》

親レコード型名には,RECORD句で定義したレコード型名を指定してください。

(k) ORDER

ORDER {LAST│SORTED DUPLICATES PROHIBITED}

DMLによるレコードの格納時(STORE),またはHiRDB/SDデータベース作成ユティリティ(pdsdblod)で,子レコード実現値を親子集合内の任意の実現値に格納する際の位置(親子集合内の子レコードへの挿入順序)を指定します。

LAST

子レコード実現値群の最後に格納します。

SORTED DUPLICATES PROHIBITED

子レコード型で指定したキー項目(KEY句に指定した構成要素)の値に従って,昇順または降順に格納します。

同じ親レコードに対して,同じ値のキー項目を持つ子レコードが格納済みの場合,格納できません。

《規則》

1つのSET句の指定には,必ずORDER句を指定してください。

(l) MEMBER

MEMBER 子レコード型名

〜<識別子>((1〜30バイト))

親子集合内の子レコード型名を指定します。

《規則》
  • 子レコード型名には,RECORD句で定義したレコード型名を指定してください。ただし,親子集合の親レコード型名と重複する子レコード型名は指定できません。

  • 1つのSET句には,必ずMEMBER句を指定してください。

(m) INSERTION

INSERTION AUTOMATIC

子レコードを親子集合に格納するときの挿入方法を指定します。

AUTOMATIC

子レコードのレコード実現値がデータベースに格納されると,自動的に親レコードが属する親子集合型の親子集合実現値に格納されます。

(n) RETENTION

RETENTION FIXED

子レコードを親子集合から切り離すまでの属性を指定します。

FIXED

レコードが,ある親子集合の子レコードになったレコードは,データベースから削除されるまで,その親子集合の子レコードでなければなりません。

(o) KEY

KEY {ASCENDING│DESCENDING} 構成要素名〔,構成要素名〕…

ORDER句でSORTED DUPLICATES PROHIBITEDを指定した親子集合の子レコードを構成要素の値に従って,昇順に格納するか,または降順に格納するかを指定します。指定した構成要素をキー項目とします。

ASCENDING

子レコードを昇順に格納します。

DESCENDING

子レコードを降順に格納します。

構成要素名

〜<識別子>((1〜30バイト))

格納時のキーになる構成要素名を指定します。

《規則》
  • キーの構成要素長の合計は254バイト以内としてください。

  • 指定できる構成要素は,データ種別1がユーザデータ(U),データ種別2がその他のユーザデータ(D)の構成要素だけです。

  • 構成要素名には,RECORD句で定義した構成要素名を指定してください。

  • 1つのKEY句に構成要素名を17個以上指定できません。

  • KEY句に同じ構成要素名を重複して指定できません。

  • 指定した構成要素,または指定した構成要素の上位の構成要素にOCCURS句を指定できません。

  • ORDER句でLASTを指定した場合,KEY句は指定できません。

  • ORDER句でSORTED DUPLICATES PROHIBITEDを指定した場合,必ずKEY句を指定してください。

(p) SETOPTION

SETOPTION

親子集合に関するオプションを指定します。

(q) OCCURRENCE NUMBER

OCCURRENCE NUMBER 一連番号の最大値

〜<符号なし整数>((1〜2,147,483,647))≪2,147,483,647≫

一連番号の最大値を指定します。

《規則》

WARNING句またはREUSE句を指定する場合は,この句も指定する必要があります。

(r) 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 一連番号の監視」を参照してください。

《規則》

  • 一連番号使用比率を複数指定する場合,指定値が昇順になるように指定してください。

(s) REUSE

REUSE YES

削除された一連番号を再利用します。

一連番号の再利用の例については,「図11-14 一連番号再利用の例」を参照してください。

《規則》

  • レコードを全件削除した場合は,REUSE句の指定に関係なく,最初から一連番号を振り直します。

  • 常にREUSE YESが仮定されます(REUSE句を省略しても,REUSE YESが仮定されます)。

(t) SDBOPTION

SDBOPTION

SDBデータベースのオプション機能を定義します。

(u) 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)(r) WARNING」の規則を参照してください。

(v) END SCHEMA

END SCHEMA

SDBデータベース定義の終了を示します。