Hitachi

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


11.6.2 SDBデータベース格納定義【4V AFM】

*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エリア名)〕…)}

   }

※4,※5,※7

(i)

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

×

(j)

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

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

(k)

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

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

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

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

※4,※5,※7

(l)

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

×

(m)

   〔SECONDARY INDEX 二次インデクス名

(n)

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

(o)

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

(p)

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

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

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

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

※4,※5,※7

    〕…

 …

(q)

 SET 親子集合型名

×

(r)

   OWNER POINTER FOR FIRST LAST MEMBER

(s)

   MEMBER POINTER FOR NEXT PRIOR TENANT

 …

(t)

 〔SDBOPTION

※3

(u)

   〔KEYDEF 構成要素名

(v)

      DATA データベースのキー値〔,格納レコード名〕…

※6

    〕…

  〕

(w)

END STORAGE SCHEMA

×

×

(凡例)

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

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

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

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

注※1

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

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

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

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

注※3

レコード分割キーの追加ができます。

注※4

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

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

表11‒54 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エリアを使用しない変更

注※5

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

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

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

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

注※6
  • RDエリアの追加の場合に,RDエリア分割キーの追加ができます。

  • RDエリアの削除の場合に,RDエリア分割キーの削除ができます。

注※7

RDエリアの定義を変更した場合,変更対象のRDエリアに格納されているデータが削除されることがあります。RDエリアの定義変更時のデータの削除有無については,「表11-23 RDエリアの定義変更時のデータの削除有無(格納条件指定の横分割の場合)」を参照してください。

(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 AFMの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‒55 シーケンシャルインデクス作成時に指定できる構成要素名の条件

    項目

    内容

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

    最大7個

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

    249バイト以内

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

    構成要素名

    基本項目の構成要素名

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

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

    データ型

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

    構成要素名の指定が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‒57 シーケンシャルインデクス用RDエリアとして指定できるRDエリア数とSDBデータベースの横分割の関係

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

    指定できるRDエリア数

    分割指定なし

    1

    格納条件分割

    1〜256

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

  • 1つのWITHIN句の中では,シーケンシャルインデクス用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‒58 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) WITHIN

WITHIN {格納レコード用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‒59 RDエリア分割キーのデータ型ごとのRDエリア分割キー値の指定形式

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

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

16進数字

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

10進数定数

整数定数

CHARACTER

×

×

XCHARACTER

×

×

PACKED 〔DECIMAL FIXED〕

×

×

×

INTEGER

×

×

×

(凡例)

○:指定できます。

×:指定できません。

《規則》

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

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

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

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

    指定できるRDエリア数

    分割指定なし

    1

    格納条件分割

    1〜256

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

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

  • 1つのWITHIN句の中では,格納レコード用RDエリア名は一意に指定してください。

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

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

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

    RDエリア分割キー値

    最小

    最大

    16進数字

    X'00…00'

    X'FF…FF'

    10進数定数

    -9…9.9…9

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

    9…9.9…9

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

    整数定数

    −2147483648

    2147483647

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

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

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

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

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

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

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

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

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

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

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

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

  • 4V DAMまたは4V MAMのSDBデータベースで,データ種別1がK,データ種別2がAまたはMの構成要素が存在する場合,その構成要素を格納条件の構成要素として指定してください。

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

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

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

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

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

(l) POINTER AREA SIZE

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

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

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

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

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

(m) SECONDARY INDEX

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

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

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

《規則》

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

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

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

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

(n) ORDER KEY

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

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

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

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

《規則》

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

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

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

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

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

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

    レコード型種別

    一連番号最大値※1

    ユーザキー※2

    二次インデクスの指定

    指定する構成要素

    仮想ルートレコード型

    ×

    子レコード型

    1以上

    なし

    1本必須

    データベースキー1〜7,一連番号

    あり

    2本必須

    • データベースキー1〜7,一連番号

    • データベースキー1〜7,ユーザキー

    0

    ×

    (凡例)

    ×:指定できません。

    −:該当しません。

    注※1

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

    注※2

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

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

  • 4V MAMのSDBデータベースで,ユーザキーありの場合

    SDBデータベース定義

                               :
    RECORD REC1
        2 DBKEY_L1   CHARACTER  5     TYPE D,L
        2 DBKEY
          3 DBKEY_L2   XCHARACTER 1   TYPE K,L
          3 DBKEY_L3   XCHARACTER 1   TYPE K,L
          3 DBKEY_L4   CHARACTER  3   TYPE K,R
          3 DBKEY_LN   INTEGER        TYPE K,N
        2 USERD10      CHARACTER  4   TYEP U,K
        2 USERD11      CHARACTER  10  TYPE U,D
                               :

    SDBデータベース格納定義

                               :
    STORAGE RECORD REC1
        CLUSTERED SET1
        WITHIN  MAMX01
        SECONDARY INDEX  REC1_SI1
          ORDER KEY ASCENDING  DBKEY_L1, DBKEY_L2, DBKEY_L3, 
                               DBKEY_L4, DBKEY_LN
          WITHIN MAMX01_I
        SECONDARY INDEX  REC1_SI2
          ORDER KEY ASCENDING  DBKEY_L1, DBKEY_L2, DBKEY_L3,
                               DBKEY_L4, USERD10
          WITHIN MAMX01_I
                               :

(o) PCTFREE

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

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

(p) WITHIN

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

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

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

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

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

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

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

《規則》

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

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

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

  • 1つのWITHIN句の中では,二次インデクス用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-58 RDエリアに定義できるリソースの組み合わせ」を参照してください。

(q) SET

SET 親子集合型名

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

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

《規則》

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

(r) OWNER POINTER FOR

OWNER POINTER FOR FIRST LAST MEMBER

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

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

(s) MEMBER POINTER FOR

MEMBER POINTER FOR NEXT PRIOR TENANT

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

NEXT PRIOR

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

(t) SDBOPTION

SDBOPTION

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

(u) KEYDEF

KEYDEF 構成要素名
構成要素名

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

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

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

  • API(レコードの検索,またはレコードの格納)の実行時,またはHiRDB/SDデータベース作成ユティリティ(pdsdblod)実行時に,データのキー値を基にアクセス対象のレコードを決めることができます。

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

《規則》

  • 仮想ルートレコード型内のデータ種別1がDの構成要素を必ず指定してください。

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

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

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

  • 4V MAMのSDBデータベースの場合,データベースキーの構成要素名をSDBデータベース定義の定義順にすべて指定する必要があります。

  • SDBデータベース定義のSDBOPTION句下のFUNCTION句にFORMAT USEを指定して,フォーマットライト機能を使用する場合,データベースキーの構成要素名を定義順にすべて指定する必要があります。

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

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

    SDBデータベース種別

    KEYDEF句,DATA句の指定

    レコード型名

    用途

    4V AFM

    次の場合に使用します。

    • フォーマットライト機能使用時

    • データロード時

    • APIによるデータ操作時

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

    (凡例)

    ○:必須で指定します。

    △:省略できます。

    注※

    仮想ルートレコード型を除いて,2個以上の格納レコードがある場合,どちらかのKEYDEF句内で最低1つは指定する必要があります。

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

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

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

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

  • 構成要素のデータ種別とKEYDEF句の指定の組み合わせを次の表に示します。

    表11‒64 構成要素のデータ種別とKEYDEF句の指定の組み合わせ

    データ種別1

    データ種別2

    KEYDEF句下のDATA句の格納レコード名(子レコード型)の指定

    D

    L

    ×

    A

    ×

    R

    ×

    M

    ×

    K

    L

    ×

    A

    ×

    R

    M

    上記以外

    ×

    上記以外

    ×

    (凡例)

    ○:指定が必要です。

    ×:指定できません。

(v) 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として扱います。

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

格納レコード名

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

データベースのキー値と格納先の格納レコード名を指定します。

KEYDEF句の構成要素名で指定した,構成要素のデータ型ごとのデータベースのキー値の指定形式を次の表に示します。

表11‒65 KEYDEF句の構成要素名で指定した,構成要素のデータ型ごとのデータベースのキー値の指定形式

KEYDEF句の構成要素名で指定した構成要素のデータ型

データベースのキー値の指定形式

16進数字

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

10進数定数

整数定数

CHARACTER

×

×

XCHARACTER

×

×

PACKED 〔DECIMAL FIXED〕

×

×

×

INTEGER

×

×

×

(凡例)

○:指定できます。

×:指定できません。

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

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

SDBデータベース定義のSDBOPTION句下のFUNCTION句にFORMAT USEを指定して,フォーマットライト機能を使用する場合,フォーマットライト機能ではすべての組み合わせで,データベースのフォーマットライトを行います。

格納レコード名は,SDBデータベースのキー値で格納先の子レコード型名を決める場合に指定します。

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

表11‒66 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'で設定します。

《規則》

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

  • 4V MAMのSDBデータベースの場合,レコード分割キー以外のデータベースキーのキー値は1つだけ指定できます。

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

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

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

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

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

    データ型

    指定順序

    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句と存在しないDATA句を同時に指定することはできません。

  • 格納レコード名は,1つのSDBデータベース定義に対して1つのKEYDEF句にまとめて指定してください。

  • 格納レコード名には,子レコード型名を指定してください。

  • データ種別1がKで,データ種別2がRまたはMの構成要素を指定したKEYDEF句内で,すべての子レコード型名を指定する必要があります。

  • 4V MAMのSDBデータベースの場合,複数のキー値に対して同じ格納レコード名を指定できません。

そのほかの規則

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

  • KEYDEF句の構成要素名で指定した構成要素が,データ種別1がDの構成要素の場合,DATA句は1つだけ指定してください。

(w) END STORAGE SCHEMA

END STORAGE SCHEMA

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