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 |
||
STORAGE SCHEMA SDBデータベース格納名 FOR SDBデータベース名 |
× |
× |
|
DBTYPE 4V |
× |
||
STORAGE RECORD 格納レコード名 |
○※2 |
||
{CLUSTERED 親子集合型名 |SEQUENTIAL シーケンシャルインデクス名 |
|||
FOR RECORD |
|||
ORDER KEY ASCENDING 構成要素名〔,構成要素名〕… |
|||
〔PCTFREE ページ内の未使用領域の比率〕 |
|||
WITHIN {シーケンシャルインデクス用RDエリア名 |(シーケンシャルインデクス用RDエリア名) |((シーケンシャルインデクス用RDエリア名) 〔,(シーケンシャルインデクス用RDエリア名)〕…)} } |
○※3,※4,※6 |
||
〔SUBPAGE NUMBER サブページ分割数〕 |
× |
||
〔PCTFREE {ページ内の未使用領域の比率 |(〔ページ内の未使用領域の比率〕,セグメント内の空きページの比率)}〕 |
|||
〔DEPENDING ON 構成要素名〕 |
|||
WITHIN {格納レコード用RDエリア名 |(格納レコード用RDエリア名) |((格納レコード用RDエリア名) 〔格納条件〕 〔,(格納レコード用RDエリア名) 格納条件〕…) |((格納レコード用RDエリア名) RDエリア分割キー値 〔,(格納レコード用RDエリア名) RDエリア分割キー値…〕 ,(格納レコード用RDエリア名))} |
○※3,※4,※6 |
||
〔POINTER AREA SIZE 管理領域の予備領域の長さ〕 |
× |
||
〔SECONDARY INDEX 二次インデクス名 |
|||
ORDER KEY ASCENDING 構成要素名,構成要素名〔,構成要素名〕… |
|||
〔PCTFREE ページ内の未使用領域の比率〕 |
|||
WITHIN {二次インデクス用RDエリア名 |(二次インデクス用RDエリア名) |((二次インデクス用RDエリア名) 〔,(二次インデクス用RDエリア名)〕…)} |
○※3,※4,※6 |
||
〕… |
|||
… |
|||
〔SET 親子集合型名 |
× |
||
OWNER POINTER FOR {FIRST LAST |FIRST LAST USER} MEMBER |
|||
MEMBER POINTER FOR NEXT PRIOR TENANT |
|||
〕… |
|||
〔SDBOPTION |
× |
||
〔KEYDEF 構成要素名 |
|||
DATA データベースのキー値 … |
○※5 |
||
〕… |
|||
〕 |
|||
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
×
削除
○
格納条件を変更しない
×
表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句に指定したレコード型が,ルートレコード型以外の場合は指定できません。
《規則》
-
シーケンシャルインデクス名には,二次インデクス名とは別の名称を指定してください。
-
シーケンシャルインデクス名は,同一スキーマ内で一意になるように指定してください。二次インデクス名も含めて一意になるようにしてください。
-
(f) ORDER KEY
- ORDER KEY ASCENDING 構成要素名〔,構成要素名〕…
-
インデクスのキーとなる構成要素名を指定します。
指定した構成要素名をキーとして,昇順にシーケンシャルインデクスが作成されます。
- ASCENDING
-
昇順にシーケンシャルインデクスを作成します。
- 構成要素名
-
〜<識別子>((1〜30バイト))
インデクスのキーに指定する構成要素を次に示すように指定してください。
-
SDBデータベース定義内のルートレコード型のデータベースキーに指定した基本項目の構成要素名を,定義順にすべて指定します。ルートレコード型の構成要素の指定については,「表11-14 ルートレコード型の構成要素の指定」を参照してください。SDBデータベースの定義例については,「11.11.1 SDBデータベースの定義例(4V FMBの場合)」を参照してください。
《規則》
-
構成要素名は,格納レコード名と対応する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
-
(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)※
-
シーケンシャルインデクス用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)※
-
格納条件分割で格納レコード用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個です。
-
二次インデクスの構成要素の指定順序は,次の表の「指定する構成要素」の記述順に従ってください。データベースキー1〜7,上位の一連番号,一連番号,またはユーザキーは,SDBデータベース定義の定義順ですべて指定してください。
表11‒33 二次インデクスの定義規則 レコード型種別
一連番号最大値※1
ユーザキー※2
二次インデクスの指定
指定する構成要素
ルートレコード型
−
−
×
−
ルートレコード型以外
1以上
なし
0〜1本
データベースキー1〜7,上位の一連番号群※3,一連番号
あり
0〜2本
-
データベースキー1〜7,上位の一連番号群※3,一連番号
-
データベースキー1〜7,上位の一連番号群※3,ユーザキー
0
−
×
−
-
-
二次インデクスに指定する構成要素の定義例を次に示します。
-
上位の一連番号なしで,ユーザキーなしの場合
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ポインタを持たせる場合に指定します。
(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
-
-
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
- 《規則》
-
データベースのキー値に関する規則
-
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個です。
-