Hitachi

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


11.5.2 SDBデータベース格納定義【4V FMB】

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

注意事項

*ENTRY DICTIONARY文または*ALTER DICTIONARY文に指定したSDBデータベース格納定義は保存しておいてください。*ALTER DICTIONARY文でSDBデータベース格納定義を変更する際,変更個所だけを指定するのではなく,変更後のSDBデータベース格納定義をすべて指定する必要があります。このとき,保存しておいたSDBデータベース格納定義が必要になります。

〈この項の構成〉

(1) 機能

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

(2) 形式

項番

形式

オペランドの変更可否

レコード型の追加時※1

RDエリアの変更時※1

(a)

STORAGE SCHEMA SDBデータベース格納名 FOR SDBデータベース名

×

×

(b)

DBTYPE 4V

×

(c)

 STORAGE RECORD 格納レコード名

※2

(d)

   {CLUSTERED 親子集合型名

     |SEQUENTIAL シーケンシャルインデクス名

(e)

   FOR RECORD

(f)

   ORDER KEY ASCENDING 構成要素名〔,構成要素名〕…

(g)

   〔PCTFREE ページ内の未使用領域の比率〕

(h)

   WITHIN {シーケンシャルインデクス用RDエリア名

         |(シーケンシャルインデクス用RDエリア名)

         |((シーケンシャルインデクス用RDエリア名)

         〔,(シーケンシャルインデクス用RDエリア名)〕…)}

   }

※3,※4,※6

(i)

   〔SUBPAGE NUMBER サブページ分割数〕

×

(j)

   〔PCTFREE {ページ内の未使用領域の比率

     |(〔ページ内の未使用領域の比率〕,セグメント内の空きページの比率)}〕

(k)

   〔DEPENDING ON 構成要素名〕

(l)

   WITHIN {格納レコード用RDエリア名

       |(格納レコード用RDエリア名)

       |((格納レコード用RDエリア名) 〔格納条件〕

        〔,(格納レコード用RDエリア名) 格納条件〕…)

       |((格納レコード用RDエリア名) RDエリア分割キー値

        〔,(格納レコード用RDエリア名) RDエリア分割キー値…〕

         ,(格納レコード用RDエリア名))}

※3,※4,※6

(m)

   〔POINTER AREA SIZE 管理領域の予備領域の長さ〕

×

(n)

   〔SECONDARY INDEX 二次インデクス名

(o)

      ORDER KEY ASCENDING 構成要素名,構成要素名〔,構成要素名〕…

(p)

     〔PCTFREE ページ内の未使用領域の比率〕

(q)

      WITHIN {二次インデクス用RDエリア名

         |(二次インデクス用RDエリア名)

         |((二次インデクス用RDエリア名)

          〔,(二次インデクス用RDエリア名)〕…)}

※3,※4,※6

    〕…

 …

(r)

 〔SET 親子集合型名

×

(s)

    OWNER POINTER FOR {FIRST LAST

               |FIRST LAST USER} MEMBER

(t)

    MEMBER POINTER FOR NEXT PRIOR TENANT

  〕…

(u)

 〔SDBOPTION

×

(v)

   〔KEYDEF 構成要素名

(w)

      DATA データベースのキー値 …

※5

    〕…

  〕

(x)

END STORAGE SCHEMA

×

×

(凡例)

○:*ALTER DICTIONARY文の実行時に変更できるオペランドです。

×:*ALTER DICTIONARY文の実行時に変更できないオペランドです。

  • 定義句は,形式で記述している順序に従って指定します。必須の定義と省略できる定義の間は形式で記載されているとおりに指定してください。

  • *ALTER DICTIONARY文で子レコード型を追加した場合,POINTER AREA SIZE句に指定していた管理領域の予備領域の長さが自動的に変更されることがあります。変更後の値については,KFPB61784-Iメッセージに出力されます。

注※1

*ALTER DICTIONARY文実行時のオペランド追加可否です。

注※2
  • 最下位の子レコード型の追加とその親子集合の追加ができます。

  • STORAGE RECORD句とSET句は必ず両方指定してください。どちらか片方だけを指定することはできません。

  • 既存の格納レコード型の定義は変更できません。

注※3

格納レコード用RDエリアとインデクス用RDエリアはペアで変更します。

1つの*ALTER DICTIONARY文で実行できる格納レコード用RDエリアの変更を次の表に示します。

表11‒22 1つの*ALTER DICTIONARY文で実行できる格納レコード用RDエリアの変更

格納レコード用RDエリア変更内容

横分割の方法

格納条件指定

境界値指定

1つのRDエリアを追加または削除

複数のRDエリアを追加または削除

1つのRDエリアを複数のRDエリアに分割

複数のRDエリアを複数のRDエリアに分割

×

×

複数のRDエリアを1つのRDエリアに統合

複数のRDエリアを複数のRDエリアに統合

×

×

格納RDエリア数を変更しないで,格納条件だけを追加,更新,または削除

×

×

(凡例)

○:実行できます。

×:実行できません。

−:該当しません。

なお,次の操作はできません。

  • 1つのRDエリアに格納していたレコード型を,複数のRDエリアに分割格納する変更

  • 複数のRDエリアに分割格納していたレコード型を,1つのRDエリアに格納する変更

  • 横分割方法の変更

    格納条件指定で分割していた定義を,境界値指定の分割に変更することはできません。また,その逆もできません。

  • 1つのRDエリアを複数のRDエリアに分割する際,分割元のRDエリアを削除する変更

  • 複数のRDエリアを1つのRDエリアに統合する際,統合先のRDエリアに統合元のRDエリアを使用しない変更

注※4

次の条件をすべて満たす場合,RDエリアの追加,削除はできません。

  • 境界値分割指定である

  • レコード型がサーバ内で横分割されていない

  • レコード型の先頭のデータベースキーのデータ種別がK,A以外である

  • 同一RDエリアに格納する条件を複数に分けて定義している

例を次に示します。

[図データ]

[説明]
  • REC1は親レコードを示しています。

  • 店番は,REC1の分割キーを示しています。

  • REC1は,3つのBESおよび3つのRDエリアに境界値分割されています。

注※5
  • RDエリアの追加および境界値分割のRDエリアの分割の場合に,RDエリア分割キーの追加ができます。

  • RDエリアの削除および境界値分割のRDエリアの統合の場合に,RDエリア分割キーの削除ができます。

注※6

RDエリアの定義を変更した場合,変更対象のRDエリアに格納されているデータが削除されることがあります。RDエリアの定義変更時のデータの削除有無を次の2つの表に示します。

表11‒23 RDエリアの定義変更時のデータの削除有無(格納条件指定の横分割の場合)

分割格納条件の変更の種類

RDエリアごとの変更内容

データの削除有無

追加

追加

×

格納条件を変更しない

×

削除

削除

格納条件を変更しない

×

分割

追加

×

格納条件を一部削除※2

※1

格納条件を変更しない

×

統合

格納条件を一部追加※3

×

削除

格納条件を変更しない

×

(凡例)

○:データが削除されます。

×:データは削除されません。

注※1

同期点処理が行われます。

注※2

分割元のRDエリアです。

注※3

統合先のRDエリアです。

表11‒24 RDエリアの定義変更時のデータの削除有無(境界値指定の横分割の場合)

分割格納条件の変更の種類

RDエリアごとの変更内容

データの削除有無

分割

追加

×

境界値の範囲を変更

境界値の範囲を一部追加※2

×

境界値の範囲を一部削除※3

※1

境界値の範囲を変更しない

×

統合

境界値の範囲を変更

境界値の範囲を一部追加※4

×

境界値の範囲を一部削除※5

※1

削除

境界値の範囲を変更しない

×

(凡例)

○:データが削除されます。

×:データは削除されません。

注※1

同期点処理が行われます。

注※2

すでに使用しているRDエリアに対して,RDエリア分割キー値の格納範囲を追加するケースが該当します。

(例)

[図データ]

上記の例の場合,RDエリア2がこのケースに該当します。RDエリア1の境界値の範囲のうち,店番21〜をRDエリア2に分割しています。

注※3

分割元のRDエリアです。

注※4

統合先のRDエリアです。

注※5

統合元のRDエリアのうち,RDエリア分割キー値の格納範囲の一部が削除されるRDエリアが該当します。

(例)

[図データ]

上記の例の場合,RDエリア2がこのケースに該当します。RDエリア2の境界値の範囲のうち,店番21〜をRDエリア1に統合しています。

(3) オペランドの説明

SDBデータベース格納定義の各オペランドの指定内容を説明します。

(a) STORAGE SCHEMA

STORAGE SCHEMA SDBデータベース格納名 FOR SDBデータベース名

SDBデータベース格納名と対応するSDBデータベース名を指定します。

SDBデータベース格納名

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

SDBデータベース格納名を指定します。

すでに使用しているSDBデータベース格納名は指定できません。

SDBデータベース名

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

SDBデータベース名を指定します。

SDBデータベース名に一致する名称がSDBデータベース定義にない場合は,エラーとなります。

(b) DBTYPE

DBTYPE 4V

SDBデータベース種別が4V FMBのSDBデータベースを定義します。

注意事項

SDBデータベース種別が4V(4V FMBまたは4V AFM)のSDBデータベースとSD FMBのSDBデータベースをシステム内で混在して定義することはできません。混在させた場合,動作を保証しません。

(c) STORAGE RECORD

STORAGE RECORD 格納レコード名
格納レコード名

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

SDBデータベース定義のRECORD句で指定したレコード型名を,格納レコード名として指定します。

《規則》

  • SDBデータベース定義のRECORD句で指定したレコード型名と同じ個数,同じ順番で指定してください。

  • すでに使用している格納レコード名は指定できません。ただし,格納レコードの所有者(スキーマ)が異なる場合は,同じ格納レコード名を指定できます。

(d) CLUSTERED,SEQUENTIAL

CLUSTERED 親子集合型名|SEQUENTIAL シーケンシャルインデクス名

格納するレコードの配置方法を指定します。

CLUSTERED 親子集合型名

親子集合型名

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

すべての子レコードを親レコードと同じRDエリアに格納する場合に指定します。

《規則》

  • STORAGE RECORD句に指定したレコード型ごとに1つ指定できます。STORAGE RECORD句に指定したレコード型が,ルートレコード型の場合は指定できません。

  • SDBデータベース格納定義のSET句に指定する親子集合型名と同じ個数,同じ順番で指定してください。

SEQUENTIAL シーケンシャルインデクス名

インデクスのキーの値の順序に従って,親レコード実現値の格納位置を決めるときに指定します。SEQUENTIAL句は,ルートレコード型に必ず指定します。

シーケンシャルインデクス名

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

STORAGE RECORD句に指定したルートレコード型に対して1つ指定します。STORAGE RECORD句に指定したレコード型が,ルートレコード型以外の場合は指定できません。

《規則》

  • シーケンシャルインデクス名には,二次インデクス名とは別の名称を指定してください。

  • シーケンシャルインデクス名は,同一スキーマ内で一意になるように指定してください。二次インデクス名も含めて一意になるようにしてください。

(e) FOR RECORD

FOR RECORD

レコード型単位にシーケンシャルインデクスを作成します。

キーの値が同じ場合,シーケンシャルインデクスへの格納を禁止します。

(f) ORDER KEY

ORDER KEY ASCENDING 構成要素名〔,構成要素名〕…

インデクスのキーとなる構成要素名を指定します。

指定した構成要素名をキーとして,昇順にシーケンシャルインデクスが作成されます。

ASCENDING

昇順にシーケンシャルインデクスを作成します。

構成要素名

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

インデクスのキーに指定する構成要素を次に示すように指定してください。

《規則》

  • 構成要素名は,格納レコード名と対応するSDBデータベース定義のレコード型名で指定した構成要素名としてください。

  • シーケンシャルインデクス作成時に指定できる構成要素名の条件について,次の表に示します。

    表11‒25 シーケンシャルインデクス作成時に指定できる構成要素名の条件

    項目

    内容

    指定できる構成要素名の数

    最大7個

    インデクスのキー長の合計

    255バイト以内

    インデクスのキーに指定する構成要素とキー長の関係については,「表11-26 インデクスのキーに指定する構成要素とキー長の関係」を参照してください。

    構成要素名

    基本項目の構成要素名

    集団項目が含まれる構成要素名は指定できません。

    表11‒26 インデクスのキーに指定する構成要素とキー長の関係

    データ型

    インデクスのキー長(単位:バイト)

    構成要素名の指定が1つの場合

    構成要素名の指定が複数の場合

    CHARACTER

    SDBデータベース定義で指定したデータ長

    SDBデータベース定義で指定したデータ長+制御部(1バイト)

    XCHARACTER

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

    ↓(整数部桁数+小数部桁数)÷2↓+1

    ↓(整数部桁数+小数部桁数)÷2↓+2

    INTEGER

    4

    5

(g) PCTFREE

PCTFREE ページ内の未使用領域の比率

〜<符号なし整数>((0〜99))≪30≫

インデクスページ内の未使用領域の比率を指定します。

(h) WITHIN

WITHIN {シーケンシャルインデクス用RDエリア名

|(シーケンシャルインデクス用RDエリア名)

|((シーケンシャルインデクス用RDエリア名)

〔,(シーケンシャルインデクス用RDエリア名)〕…)}

シーケンシャルインデクス用RDエリア名

〜<RDエリア名>((1〜30バイト))

シーケンシャルインデクスを格納するRDエリア名を指定します。

1つのSEQUENTIAL句に対して,WITHIN句を必ず1つ指定してください。

《規則》

シーケンシャルインデクスを複数のRDエリアに格納する場合の規則

  • シーケンシャルインデクス用RDエリアとして指定できるRDエリアの数とSDBデータベースの横分割の関係を次の表に示します。

    表11‒27 シーケンシャルインデクス用RDエリアとして指定できるRDエリア数とSDBデータベースの横分割の関係

    SDBデータベースの横分割方法

    指定できるRDエリア数

    分割指定なし

    1

    格納条件分割

    1〜256

    境界値分割

    2〜3,000(1,024)

    注※

    WITHIN句に指定できるRDエリア名の延べ数の最大値は3,000になります。1,024は,WITHIN句にRDエリア名を重複して指定する場合,RDエリア名の重複を排除して数えたときの最大値です。

  • シーケンシャルインデクス用RDエリアは,格納レコード用RDエリアと同じ数を指定する必要があります。

  • 1つのWITHIN句の中では,シーケンシャルインデクス用RDエリア名は一意に指定してください。なお,境界値分割指定の場合,隣接するRDエリア名が重複している場合だけエラーとなります。

  • 境界値分割指定の格納レコード用RDエリアを重複して指定している場合は,シーケンシャルインデクス用RDエリアも重複して指定してください。シーケンシャルインデクス用RDエリアを重複して指定する場合の例を次の表に示します。

    表11‒28 シーケンシャルインデクス用RDエリアを重複して指定する場合の例

    指定

    格納レコード用RDエリアの指定

    シーケンシャルインデクス用RDエリアの指定

    RDエリアの重複なし

    ((RDAREAX) X'00FF',

    (RDAREA1) X'01FF',

    (RDAREA2) X'03FF',

    (RDAREA3) )

    ((RDAREAX_I),

    (RDAREA1_I),

    (RDAREA2_I),

    (RDAREA3_I))

    RDエリアの重複あり

    ((RDAREAX) X'00FF',

    (RDAREA1) X'01FF',

    (RDAREA2) X'03FF',

    (RDAREA1))

    ((RDAREAX_I),

    (RDAREA1_I),

    (RDAREA2_I),

    (RDAREA1_I))

  • 格納レコード用RDエリアと対応するシーケンシャルインデクス用RDエリアは,同じサーバ内のRDエリアである必要があります。

指定するシーケンシャルインデクス用RDエリアに関する規則

  • 格納レコード用RDエリアとして指定したRDエリアは指定できません。

  • シーケンシャルインデクス用RDエリアには,create rdarea文のdata modelオペランドにstructuredを指定したRDエリアを指定してください。

  • シーケンシャルインデクス用RDエリアとして指定するRDエリアには,1つのRDエリアにシーケンシャルインデクスと二次インデクスを合わせて,インデクスを最大500個指定できます。

  • インナレプリカ機能を使用する場合,指定するRDエリアはインナレプリカ機能の使用条件を満たしている必要があります。インナレプリカ機能の使用条件については,「付録J インナレプリカ機能使用時のHiRDB/SD定義ユティリティ(pdsdbdef)の実行【4V FMB,4V AFM】」を参照してください。

  • シーケンシャルインデクス用RDエリアに定義できるリソースの組み合わせを次の表に示します。

    表11‒29 RDエリアに定義できるリソースの組み合わせ

    定義するリソース

    RDエリアの定義

    レコード型・インデクス定義なし

    SDBデータベース格納定義A

    レコード型定義あり

    インデクス定義あり

    SDBデータベース格納定義A

    レコード型

    ×

    インデクス

    ×

    SDBデータベース格納定義B

    レコード型

    ×

    ×

    インデクス

    ×

    (凡例)

    ○:定義できます。

    ×:定義できません。

(i) SUBPAGE NUMBER

SUBPAGE NUMBER サブページ分割数
サブページ分割数

〜<符号なし整数>((2〜16))

1データページ当たりのサブページ分割数を指定します。SUBPAGE NUMBERを省略した場合,サブページ分割されません。サブページ分割数の設計方針については,「3.2.4 サブページの設計」を参照してください。

《規則》

  • ルートレコード型,およびすべての子レコード型で同じサブページ分割数を指定してください。

  • サブページ分割数を指定する場合,格納レコード用RDエリアのページ長が,4096バイトである必要があります。

(j) PCTFREE

PCTFREE {ページ内の未使用領域の比率

|(〔ページ内の未使用領域の比率〕,セグメント内の空きページの比率)}

ページ内の未使用領域の比率

〜<符号なし整数>((0〜99))

セグメント内の空きページの比率

〜<符号なし整数>((0〜50))

データベースの初期作成時に設定するページ内の未使用領域の比率を指定します。ページ内の未使用領域の比率は,0〜99(%)の範囲で指定できます。ページ内の未使用領域の比率を省略すると,30(%)が仮定されます。

SUBPAGE NUMBER句でサブページ分割数を指定している場合,ページ内の未使用領域の比率は,サブページ内の未使用領域の比率になります。例えば,30を指定した場合,サブページ内の未使用領域の比率が30%になります。

また,セグメント内の空きページの比率を0〜50(%)の範囲で指定できます。セグメント内の空きページの比率を省略すると,10(%)が仮定されます。

《規則》

ルートレコード型,およびすべての子レコード型で同じ値を指定してください。

(k) DEPENDING ON

DEPENDING ON 構成要素名
構成要素名

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

SDBデータベースを境界値で複数のRDエリアに横分割して格納する場合の,境界値分割のキーとなる構成要素名を指定します。

《規則》

  • ルートレコード型にだけ指定できます。

  • CLUSTERED句を指定した格納レコードに対しては指定できません。

  • 格納レコード名と対応するSDBデータベース定義のレコード型名で指定した構成要素名である必要があります。

  • 構成要素名には,データ種別1がK,データ種別2がAの構成要素名を指定します。

  • SDBデータベースの横分割方法が格納条件指定の場合は指定できません。

(l) WITHIN

WITHIN {格納レコード用RDエリア名

|(格納レコード用RDエリア名)

|((格納レコード用RDエリア名) 〔格納条件〕

〔,(格納レコード用RDエリア名) 格納条件〕…)

|((格納レコード用RDエリア名) RDエリア分割キー値

〔,(格納レコード用RDエリア名) RDエリア分割キー値…〕

,(格納レコード用RDエリア名))}

格納レコード用RDエリア名

〜<RDエリア名>((1〜30))

格納条件

〜構成要素名=(RDエリア分割キー値〔,RDエリア分割キー値〕…)

RDエリア分割キー値

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

〜'<英数字または下線(_)>'((1〜30バイト))※1

〜<10進数定数>※2

〜<整数定数>※3

注※1

先頭に下線(_)は指定できません。

注※2

10進数定数については,マニュアル「HiRDB SQLリファレンス」の「定数」を参照してください。

整数部と小数部にすべて0を指定する場合,符号に-を指定しないでください。-0.を指定しても0.として扱います。

なお,10進数定数の値の範囲を超える値を指定できません。

注※3

整数定数については,マニュアル「HiRDB SQLリファレンス」の「定数」を参照してください。

-0を指定しても0として扱います。

なお,整数定数の値の範囲を超える値を指定できません。

レコード実現値を格納するRDエリア名を指定します。

1つのSTORAGE RECORD句に対して,WITHIN句を必ず1つ指定してください。

RDエリア分割キーのデータ型ごとのRDエリア分割キー値の指定形式を次の表に示します。

表11‒30 RDエリア分割キーのデータ型ごとのRDエリア分割キー値の指定形式

RDエリア分割キーのデータ型

RDエリア分割キー値の指定形式

16進数字

英数字,または下線(_)

10進数定数

整数定数

CHARACTER

×

×

XCHARACTER

×

×

PACKED 〔DECIMAL FIXED〕

×

×

×

INTEGER

×

×

×

(凡例)

○:指定できます。

×:指定できません。

《規則》

レコードを複数のRDエリアに格納する場合の規則

  • 1レコード型に対して指定できる格納レコード用RDエリアの数とSDBデータベースの横分割の関係を次の表に示します。

    表11‒31 レコード型に対して指定できる格納レコード用RDエリアの数とSDBデータベースの横分割の関係

    SDBデータベースの横分割方法

    指定できるRDエリア数

    分割指定なし

    1

    格納条件分割

    1〜256

    境界値分割

    2〜3,000(1,024)

    注※

    WITHIN句に指定できるRDエリア名の延べ数の最大値は3,000になります。1,024は,WITHIN句にRDエリア名を重複して指定する場合,RDエリア名の重複を排除して数えたときの最大値です。

  • 格納条件分割で格納レコード用RD エリア名を複数指定した場合は,すべての格納レコード用RD エリア名に格納条件を指定してください。

  • 同一SDBデータベース格納定義内の子レコード型に指定する格納レコード用RDエリア名は,ルートレコード型と同じ数,同じ順番ですべて指定する必要があります。

  • 1つのWITHIN句の中では,格納レコード用RDエリア名は一意に指定してください。なお,境界値分割指定の場合,隣接するRDエリア名が重複している場合だけエラーとなります。

  • RDエリア分割キー値に指定できる範囲を次の表に示します。

    表11‒32 RDエリア分割キー値に指定できる範囲

    RDエリア分割キー値の指定形式

    SDBデータベースの横分割方法

    RDエリア分割キー値

    最小

    最大

    16進数字

    格納条件分割

    X'00…00'

    X'FF…FF'

    境界値分割

    X'00…00'

    X'FF…FE'

    10進数定数

    格納条件分割

    -9…9.9…9

    (整数部と小数部がRDエリア分割キーの全体桁数分'9'の負の数)

    9…9.9…9

    (整数部と小数部がRDエリア分割キーの全体桁数分'9'の正の数)

    境界値分割

    -9…9.9…9

    (整数部と小数部がRDエリア分割キーの全体桁数分'9'の負の数)

    9…9.9…8

    (整数部と小数部がRDエリア分割キーの全体桁数のうち,最後の桁を除くすべての桁が'9'かつ最後の桁が'8'の正の数)

    整数定数

    格納条件分割

    −2147483648

    2147483647

    境界値分割

    −2147483648

    2147483646

指定する格納レコード用RDエリアに関する規則

  • インデクスを格納するRDエリアは指定できません。

  • 格納レコード用RDエリアには,create rdarea文のdata modelオペランドにstructuredを指定したRDエリアを指定してください。

  • 指定するRDエリア名には,格納レコード長が当該RDエリアのページ長(サブページ分割をしている場合はサブページ長)に収まるRDエリア名を指定してください。

  • インナレプリカ機能を使用する場合,指定するRDエリアはインナレプリカ機能の使用条件を満たしている必要があります。インナレプリカ機能の使用条件については,「付録J インナレプリカ機能使用時のHiRDB/SD定義ユティリティ(pdsdbdef)の実行【4V FMB,4V AFM】」を参照してください。

  • 格納レコード用RDエリアに定義できるリソースの組み合わせについては,「表11-29 RDエリアに定義できるリソースの組み合わせ」を参照してください。

レコードの格納条件に関する規則

  • 格納条件は,ルートレコード型にだけ指定できます。

格納条件に指定する構成要素に関する規則

  • 1個のWITHIN句の中では,単一の構成要素名を指定してください。複数種類の構成要素名は指定できません。

  • 構成要素名には,SDBデータベース定義で指定した構成要素名を指定してください。

  • 構成要素名には,データ種別1がK,データ種別2がAの構成要素名を指定してください。

格納条件のRDエリア分割キー値に関する規則

  • 1つのWITHIN句に対するRDエリア分割キー値は,最大15,000個指定できます。

  • 1つのWITHIN句の中で同じRDエリア分割キー値は重複して指定できません。

  • RDエリア分割キーのデータ型がCHARACTER,またはXCHARACTERの場合,指定したRDエリア分割キー値の長さは,SDBデータベース定義で指定した格納条件の構成要素の長さと一致させる必要があります。

  • RDエリア分割キーのデータ型がPACKEDの場合,RDエリア分割キーの整数部桁数,および小数部桁数の範囲内の値を指定してください。

境界値分割時(DEPENDING ON句指定時)のRDエリア分割キー値に関する規則

  • 最初に境界値を指定するRDエリアには,指定する境界値以下の値のレコードが格納されます。

    2番目以降(最後は除く)に指定するRDエリアには,その前に指定した境界値より大きく,かつその後に指定する境界値以下の値のレコードが格納されます。

    最後に指定するRDエリアには,その前に指定した境界値より大きい値のレコードが格納されます。

    境界値分割時のSDBデータベースの横分割とSDBデータベース格納定義の例を次の図に示します。

    図11‒15 境界値分割時のSDBデータベースの横分割とSDBデータベース格納定義の例

    [図データ]

    <定義例>

    STORAGE SCHEMA SCM01 FOR SCM01
      DBTYPE 4V
      STORAGE RECORD RECA
        SEQUENTIAL IDX1 FOR RECORD
            :
          WITHIN ((RI1),(RI2),(RI1),(RI2))
        DEPENDING ON C1
          WITHIN ((RT1)100,(RT2)200,(RT1)300,(RT2))
            :
    END STORAGE SCHEMA
  • 境界値分割時には,格納条件の指定はできません(RDエリア分割キー値の指定をする必要があります)。

  • RDエリア分割キーのデータ型がCHARACTER,またはXCHARACTERの場合,RDエリア分割キー値の長さは,DEPENDING ON句で指定した構成要素の長さと一致させる必要があります。

  • RDエリア分割キー値は重複して指定できません。

  • RDエリア分割キー値は昇順に指定する必要があります。

  • RDエリア分割キー値を16進数字,英数字または下線(_)の形式で指定する場合,RDエリア分割キー値の長さが1つ目の長さと異なるとエラーとなります。

  • RDエリア分割キーのデータ型がPACKEDの場合,RDエリア分割キーの整数部桁数,および小数部桁数の範囲内の値を指定してください。

参考

境界値分割を指定している場合,WITHIN句では隣接する同一RDエリア名に対する境界値の指定ができません。このため,TMS-4V/SPの境界値リストに相当する情報をKEYDEF句下のDATA句で指定できます。詳細については,「11.5.2(3)(v) KEYDEF」を参照してください。

(m) POINTER AREA SIZE

POINTER AREA SIZE 管理領域の予備領域の長さ
管理領域の予備領域の長さ

〜<符号なし整数>((0〜16,384))≪0≫

親レコードで管理している子レコード用の管理領域の予備領域の長さを指定します。

管理領域では,ポインタの情報や一連番号などを管理しています。

将来の親子集合の拡張を考慮して,親子集合1個当たり,約40バイトの予備領域を指定しておくことを推奨します。

(n) SECONDARY INDEX

SECONDARY INDEX 二次インデクス名
二次インデクス名

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

二次インデクス名を指定します。

《規則》

  • 二次インデクスはルートレコード型には指定できません。

  • 二次インデクス名は,同一スキーマ内で一意になるように指定してください。シーケンシャルインデクス名も含めて一意になるようにしてください。

  • 二次インデクス名には,シーケンシャルインデクス名とは別の名称を指定してください。

  • SECONDARY句は,1つのSTORAGE RECORD句内で2つまで指定できます。詳細については,「表11-33 二次インデクスの定義規則」を参照してください。

(o) ORDER KEY

ORDER KEY ASCENDING 構成要素名,構成要素名〔,構成要素名〕…
構成要素名

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

二次インデクスのキーとなる構成要素名を指定します。

ORDER KEY句については,「11.5.2(3)(f) ORDER KEY」を参照してください。

《規則》

  • 1つのSTORAGE RECORD内に複数のインデクス(シーケンシャルインデクス,および二次インデクス)を定義する場合,すべての構成要素名の指定順序が同一のインデクスを複数定義できません。

  • 二次インデクスについては,「表11-33 二次インデクスの定義規則」に従って定義してください。

  • キー項目を含む場合,SDBデータベース定義のKEY句にASCENDINGを指定してください。

  • 1つの二次インデクスに指定できる構成要素の数は,2〜16個です。

  • 二次インデクスの構成要素の指定順序は,次の表の「指定する構成要素」の記述順に従ってください。

    表11‒33 二次インデクスの定義規則

    レコード型種別

    一連番号最大値※1

    ユーザキー※2

    二次インデクスの指定

    指定する構成要素

    ルートレコード型

    ×

    ルートレコード型以外

    1以上

    なし

    0〜1本

    データベースキー1〜7,上位の一連番号群※3,一連番号

    あり

    0〜2本

    • データベースキー1〜7,上位の一連番号群※3,一連番号

    • データベースキー1〜7,上位の一連番号群※3,ユーザキー

    0

    ×

    (凡例)

    ×:指定できません。

    −:該当しません。

    注※1

    SDBデータベース定義のOCCURRENCE NUMBER句の指定値,または省略値です。

    注※2

    SDBデータベース定義のTYPE句のデータ種別1にU,データ種別2にKを指定した構成要素です。

    注※3

    二次インデクスを指定したレコード型に含まれる,すべての上位の一連番号(データ種別1がK,かつデータ種別2がPの構成要素)を指定してください。なお,上位の一連番号は存在しない場合があります。

二次インデクスに指定する構成要素の定義例を次に示します。

  • 上位の一連番号なしで,ユーザキーなしの場合

    SDBデータベース定義

                               :
    RECORD RECB
        2 DBKEY_L2  XCHARACTER  1  TYPE K,L
        2 DBKEY_L3  XCHARACTER  1  TYPE K,L
        2 DBKEY_L4  CHARACTER   3  TYPE K,L
        2 DBKEY     INTEGER        TYPE K,N
        2 USERDB0   CHARACTER   20 TYPE U,D
                               :

    SDBデータベース格納定義

                               :
    STORAGE RECORD RECB
        CLUSTERED SET1
        WITHIN  FMBX01
        SECONDARY INDEX  RECB_SI1
          ORDER KEY ASCENDING  DBKEY_L2, DBKEY_L3, DBKEY_L4, DBKEY
                               :
  • 上位の一連番号あり,ユーザキーありで,ユーザキーに対する二次インデクスだけ指定する場合

    SDBデータベース定義

                               :
    RECORD RECD
        2 DBKEY_L2  XCHARACTER  1  TYPE K,L
        2 DBKEY_L3  XCHARACTER  1  TYPE K,L
        2 DBKEY_L4  CHARACTER   3  TYPE K,L
        2 DBKEY_P1  INTEGER        TYPE K,P
        2 DBKEY_P2  INTEGER        TYPE K,P
        2 DBKEY     INTEGER        TYPE K,N
        2 USERDD0   CHARACTER   10 TYPE U,K
        2 USERDB1   CHARACTER   20 TYPE U,D
                               :

    SDBデータベース格納定義

                               :
    STORAGE RECORD RECD
        CLUSTERED SET2
        WITHIN  FMBX01
        SECONDARY INDEX  RECD_SI1
          ORDER KEY ASCENDING  DBKEY_L2, DBKEY_L3, DBKEY_L4, 
                               DBKEY_P1, DBKEY_P2, USERDD0
                               :

(p) PCTFREE

PCTFREE ページ内の未使用領域の比率

PCTFREE句については,「11.5.2(3)(g) PCTFREE」を参照してください。

(q) WITHIN

WITHIN {二次インデクス用RDエリア名

|(二次インデクス用RDエリア名)

|((二次インデクス用RDエリア名)〔,(二次インデクス用RDエリア名)〕…)}

二次インデクス用RDエリア名

〜<RDエリア名>((1〜30バイト))

二次インデクスを格納するRDエリア名を指定します。

1つのSECONDARY INDEX句で,WITHIN句を必ず1つ指定してください。

《規則》

二次インデクスを複数RDエリアに格納する場合の規則

  • 1つの二次インデクスに指定できる二次インデクス用RDエリアの個数は,シーケンシャルインデクス用RDエリアの個数と同じにしてください。シーケンシャルインデクス用RDエリアの個数については,「表11-27 シーケンシャルインデクス用RDエリアとして指定できるRDエリア数とSDBデータベースの横分割の関係」を参照してください。

  • 二次インデクス用RDエリアは,格納レコード用RDエリアと同じ数を指定する必要があります。

  • 1つのWITHIN句の中では,二次インデクス用RDエリア名は一意に指定してください。なお,境界値分割指定の場合,隣接するRDエリア名が重複しているときだけエラーとなります。

  • 境界値分割指定の格納レコード用RDエリアを重複して指定している場合は,二次インデクス用RDエリアも重複して指定する必要があります。

  • 格納レコード用RDエリアと対応する二次インデクス用RDエリアは,同じサーバ内のRDエリアである必要があります。

指定する二次インデクス用RDエリアに関する規則

  • 格納レコード用RDエリア名として指定したRDエリアは指定できません。

  • 二次インデクス用RDエリアには,create rdarea文のdata modelオペランドにstructuredを指定したRDエリアを指定してください。

  • 二次インデクス用RDエリアとして指定するRDエリアには,1つのRDエリアにシーケンシャルインデクスと二次インデクスを合わせて,インデクスを最大500個指定できます。

  • インナレプリカ機能を使用する場合,指定するRDエリアはインナレプリカ機能の使用条件を満たしている必要があります。インナレプリカ機能の使用条件については,「付録J インナレプリカ機能使用時のHiRDB/SD定義ユティリティ(pdsdbdef)の実行【4V FMB,4V AFM】」を参照してください。

  • 二次インデクス用RDエリアに定義できるリソースの組み合わせについては,「表11-29 RDエリアに定義できるリソースの組み合わせ」を参照してください。

(r) SET

SET 親子集合型名

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

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

《規則》

SDBデータベース定義のSET句で指定した親子集合型名と同じ個数,同じ順番で指定してください。

(s) OWNER POINTER FOR

OWNER POINTER FOR {FIRST LAST│FIRST LAST USER} MEMBER

親レコードに持たせるポインタを指定します。

FIRST LAST

親レコードにFIRSTポインタ,およびLASTポインタを持たせる場合に指定します。

FIRST LAST USER

親レコードにFIRSTポインタ,LASTポインタ,およびUSERポインタを持たせる場合に指定します。

(t) MEMBER POINTER FOR

MEMBER POINTER FOR NEXT PRIOR TENANT

子レコードに持たせるポインタを指定します。

NEXT PRIOR

子レコードにNEXTポインタ,およびPRIORポインタを持たせる場合に指定します。

(u) SDBOPTION

SDBOPTION

SDBデータベース格納定義に関するオプションを指定します。

(v) KEYDEF

KEYDEF 構成要素名

構成要素名

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

キーの項目である構成要素名を指定します。

KEYDEF句の用途を次に示します。

  • 不正データをチェックするために指定できます。

  • 境界値分割を指定している場合,横分割の指定方法がTMS-4V/SPと異なるため,TMS-4V/SPの境界値リストに相当する情報を返却するために利用できます。この場合(境界値分割の構成要素名を指定した場合),不正データのチェックはされません。

RDエリア分割キーとして,シーケンシャルインデクスの先頭以外の構成要素を指定したレコード型に対して,RDエリアを指定した検索を行う場合,RDエリア分割キーに指定した構成要素より前の構成要素をすべてKEYDEF句に指定する必要があります。

《規則》

  • KEYDEF句は省略できます。

  • 構成要素名は,SDBデータベース定義のルートレコード型でデータベースキーとして定義されている必要があります。このため,1つのSDBデータベース格納定義で指定できるKEYDEF句の最大数は,SDBデータベース定義のルートレコード型で定義できるデータベースキーの基本項目数となります。

  • KEYDEF句を複数指定する場合は,SDBデータベース定義の定義順に構成要素名を指定してください。

  • KEYDEF句を指定した場合は,DATA句を指定する必要があります。

  • SDBデータベース種別とKEYDEF句の指定の組み合わせについては,次の表を参照してください。

    表11‒34 SDBデータベース種別とKEYDEF句の指定の組み合わせ

    SDBデータベース種別

    KEYDEF句,DATA句の指定

    用途

    4V FMB

    ※1

    次の場合に使用します。

    • 不正データのチェック時

    • 境界値分割時(DEPENDING ON句指定時)にTMS-4V/SPの境界値リスト相当の情報を取得する場合※2

    (凡例)

    △:省略できます。

    注※1

    RDエリア分割キーとして,シーケンシャルインデクスの先頭以外の構成要素を指定したレコード型に対して,RDエリアを指定した検索を行う場合,RDエリア分割キーに指定した構成要素より前の構成要素をすべてKEYDEF句に指定する必要があります。

    注※2

    境界値分割を指定している場合,横分割の指定方法がTMS-4V/SPと異なるため,TMS-4V/SPの境界値リストに相当する情報を返却するために利用できます。この場合(境界値分割の構成要素名を指定した場合),不正データはチェックされません。

  • RDエリア分割キーとして,シーケンシャルインデクスの先頭以外の構成要素を指定したレコード型に対して,RDエリアを指定して検索をする場合は,次に示す条件で指定してください。

    ・RDエリア分割キーに指定した構成要素よりも前にある構成要素をすべてKEYDEF句に指定する。

    ・指定したKEYDEF句ごとのデータベースのキー値は1つだけ指定する。

    RDエリアを指定した検索については,マニュアル「TP1/Financial Service Platform 使用の手引」の「SDBハンドラ機能」の「店群順アクセス」を参照してください。

  • 境界値分割を指定している場合,KEYDEF句下のDATA句に指定したすべてのデータベースのキー値(境界値)の情報を取得したい場合のKEYDEF句の指定について説明します。

    ・WITHIN句で指定した境界値とは別に,任意のデータベースのキーを指定できます。

    ・WITHIN句で指定した境界値とのチェックは行われません。

    KEYDEF句下のDATA句に指定した,すべてのデータベースのキー値(境界値)の情報を取得したい場合の定義例を次に示します。

    [説明]

    TMS-4V/SPで,連続するエリアに対して複数の異なる境界値を指定して,次のようにSDBデータベースを横分割して格納していたとします。

    エリア名

    境界値

    意味(レコードの格納範囲)

    RDAREA1

    X'0100'

    X'0100'以上〜X'01FF'まで

    RDAREA2

    X'0200'

    X'0200'以上〜X'02FF'まで

    RDAREA2

    X'0300'

    X'0300'以上〜X'03FF'まで

    RDAREA3

    X'0400'

    X'0400'以上

    この例の場合,境界値X'0100',X'0200',X'0300',X'0400'の各値以上の値を持つレコードが各エリアに格納されます。

    これをSDBデータベース格納定義で定義すると境界値(RDエリア分割キー値)とRDエリアを次のように対応させる必要があります。

    RDエリア名

    境界値(RDエリア分割キー値)

    意味(レコードの格納範囲)

    RDAREAX(新規)

    X'00FF'

    〜X'00FF'以下

    RDAREA1

    X'01FF'

    X'0100'〜X'01FF'以下

    RDAREA2

    X'03FF'

    X'0200'〜X'03FF'以下

    RDAREA3

    なし

    X'0400'〜

    SDBデータベース格納定義では,連続的に同じRDエリアに対して異なるRDエリア分割キー値を定義できません。このため,TMS-4V/SPで境界値として指定していたX'0300'のデータが不足してしまい,TMS-4V/SPと同じ境界値リストを返却できません。

    HiRDB/SDでTMS-4V/SPと同じ境界値リストを返却するためには,TMS-4V/SPで指定していたすべての境界値をKEYDEF句に指定する必要があります。

    定義例を次に示します。

    定義例

STORAGE SCHEMA SCM01 FOR SCM01
  DBTYPE 4V
  STORAGE RECORD RECA
    SEQUENTIAL IDX1 FOR RECORD
        :
      WITHIN ((RDAREAX_I),( RDAREA1_I),( RDAREA2_I),( RDAREA3_I))
     DEPENDING ON C1
     WITHIN ( (RDAREAX) X'00FF' , (RDAREA1) X'01FF',
              (RDAREA2) X'03FF', (RDAREA3) )
          :
  SDBOPTION 
    KEYDEF C1
      DATA  X'0100'
      DATA  X'0200'
      DATA  X'0300'
      DATA  X'0400'
END STORAGE SCHEMA

(w) DATA

DATA データベースのキー値 …
データベースのキー値

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

〜'<英数字または下線(_)>'((1〜30バイト))※1

〜<10進数定数>※2

〜<整数定数>※3

注※1

先頭に下線(_)は指定できません。

注※2

10進数定数については,マニュアル「HiRDB SQLリファレンス」の「定数」を参照してください。

整数部と小数部にすべて0を指定する場合,符号に-を指定しないでください。-0.を指定しても0.として扱います。

なお,10進数定数の値の範囲を超える値は指定できません。

注※3

整数定数については,マニュアル「HiRDB SQLリファレンス」の「定数」を参照してください。

-0を指定しても0として扱います。

なお,整数定数の値の範囲を超える値は指定できません。

KEYDEF句の構成要素名で指定した構成要素のデータ型がCHARACTERまたはXCHARACTERの場合,データベースのキー値には,SDBデータベースのキー値をKEYDEF句の構成要素名で指定した構成要素のデータ属性とバイト数を合わせて指定します。

KEYDEF句の構成要素名で指定した構成要素のデータ型がPACKEDの場合,データベースのキー値にはKEYDEF句の構成要素名で指定した構成要素の整数部桁数,および小数部桁数の範囲内の値を指定します。

KEYDEF句下のDATA句でのデータベースのキー値の指定方法を次の表に示します。

表11‒35 KEYDEF句下のDATA句でのデータベースのキー値の指定方法

データ型

データベースのキー値

KEYDEF句下のDATA句でのデータベースのキー値の指定例

SDBディレクトリ情報の設定内容

CHARACTER(4)

ABCD

'ABCD'

41424344

CHARACTER(4)

abcd

'abcd'

61626364

CHARACTER(4)

1000

'1000'

31303030

XCHARACTER(4)

AB12

X'41423132'

41423132

PACKED(2,1)

15.5

15.5

155C

PACKED(2,2)

15.5

15.5

01550C

PACKED(3,2)

15.5

15.5

01550C

INTEGER

10

10

0A000000

注※

正の値または0の場合は,符号部をX'C'で設定します。負の値の場合は,符号部をX'D'で設定します。

《規則》

データベースのキー値に関する規則

  • 1つのKEYDEF句で,データベースのキー値が重複することはできません。

  • データベースのキー値を16進数字で指定する場合,データベースのキー値の長さはバイト単位で指定してください。

  • KEYDEF句で指定した構成要素が,RDエリア分割キーの構成要素として指定されている場合,格納条件のRDエリア分割キー値で指定された値と一致させてください。

  • DATA句を複数指定する場合,1つのKEYDEF句内でデータベースのキー値を昇順に指定してください。データベースのキー値を昇順に指定する例を次の表に示します。

    表11‒36 データベースのキー値を昇順に指定する例

    データ型

    指定順序

    KEYDEF句下のDATA句で指定するデータベースのキー値

    SDBディレクトリ情報の設定内容

    指定内容の意味

    CHARACTER(4)

    1

    'ABCD'

    41424344

    文字列:ABCD

    1

    X'41424344'

    41424344

    文字列:ABCD

    2

    'abCD'

    61624344

    文字列:abCD

    3

    'abcd'

    61626364

    文字列:abcd

    XCHARACTER(2)

    1

    X'0030'

    0030

    文字列:0

    2

    X'2B30'

    2B30

    文字列:+0

    3

    X'2B31'

    2B31

    文字列:+1

    4

    X'2D30'

    2D30

    文字列:−0

    5

    X'2D31'

    2D31

    文字列:−1

    PACKED(2,2)

    1

    -11.15

    01115D

    数字:-11.15

    2

    -10.15

    01015D

    数字:-10.15

    3

    10.15

    01015C

    数字:10.15

    4

    11.15

    01115C

    数字:11.15

    INTEGER

    1

    -3

    FDFFFFFF

    数字:-3

    2

    -1

    FFFFFFFF

    数字:-1

    3

    0

    00000000

    数字:0

    4

    1

    01000000

    数字:1

    5

    3

    03000000

    数字:3

    注※

    指定内容の意味が同じとなるデータベースのキー値は指定できません。

そのほかの規則

  • 1つのKEYDEF句で指定できるDATA句は,最大32,767個です。

(x) END STORAGE SCHEMA

END STORAGE SCHEMA

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