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 |
||
STORAGE SCHEMA SDBデータベース格納名 FOR SDBデータベース名 |
× |
× |
|
DBTYPE 4V |
× |
||
STORAGE RECORD 格納レコード名 |
○※2 |
||
{CLUSTERED 親子集合型名 |SEQUENTIAL シーケンシャルインデクス名 |
|||
FOR RECORD |
|||
ORDER KEY ASCENDING 構成要素名〔,構成要素名〕… |
|||
〔PCTFREE ページ内の未使用領域の比率〕 |
|||
WITHIN {シーケンシャルインデクス用RDエリア名 |(シーケンシャルインデクス用RDエリア名) |((シーケンシャルインデクス用RDエリア名) 〔,(シーケンシャルインデクス用RDエリア名)〕…)} } |
○※4,※5,※7 |
||
〔SUBPAGE NUMBER サブページ分割数〕 |
× |
||
〔PCTFREE {ページ内の未使用領域の比率 |(〔ページ内の未使用領域の比率〕,セグメント内の空きページの比率)}〕 |
|||
WITHIN {格納レコード用RDエリア名 |(格納レコード用RDエリア名) |((格納レコード用RDエリア名) 〔格納条件〕 〔,(格納レコード用RDエリア名) 格納条件〕…)} |
○※4,※5,※7 |
||
〔POINTER AREA SIZE 管理領域の予備領域の長さ〕 |
× |
||
〔SECONDARY INDEX 二次インデクス名 |
|||
ORDER KEY ASCENDING 構成要素名,構成要素名〔,構成要素名〕… |
|||
〔PCTFREE ページ内の未使用領域の比率〕 |
|||
WITHIN {二次インデクス用RDエリア名 |(二次インデクス用RDエリア名) |((二次インデクス用RDエリア名) 〔,(二次インデクス用RDエリア名)〕…)} |
○※4,※5,※7 |
||
〕… |
|||
… |
|||
SET 親子集合型名 |
× |
||
OWNER POINTER FOR FIRST LAST MEMBER |
|||
MEMBER POINTER FOR NEXT PRIOR TENANT |
|||
… |
|||
〔SDBOPTION |
○※3 |
||
〔KEYDEF 構成要素名 |
|||
DATA データベースのキー値〔,格納レコード名〕… |
○※6 |
||
〕… |
|||
〕 |
|||
END STORAGE SCHEMA |
× |
× |
- 注
-
-
定義句は,形式で記述している順序に従って指定します。必須の定義と省略できる定義の間は形式で記載されているとおりに指定してください。
-
*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句に指定したレコード型が,仮想ルートレコード型以外の場合は指定できません。
《規則》
-
シーケンシャルインデクス名には,二次インデクス名とは別の名称を指定してください。
-
シーケンシャルインデクス名は,同一スキーマ内で一意になるように指定してください。二次インデクス名も含めて一意になるようにしてください。
-
(f) ORDER KEY
- ORDER KEY ASCENDING 構成要素名〔,構成要素名〕…
-
インデクスのキーとなる構成要素名を指定します。
指定した構成要素名をキーとして,昇順にシーケンシャルインデクスが作成されます。
- ASCENDING
-
昇順にシーケンシャルインデクスを作成します。
- 構成要素名
-
〜<識別子>((1〜30バイト))
インデクスのキーに指定する構成要素を次に示すように指定してください。
-
仮想ルートレコード型に指定した基本項目の構成要素名を,定義順にすべて指定します。仮想ルートレコード型の構成要素の指定については,「表11-41 仮想ルートレコード型の構成要素の指定」を参照してください。4V DAMのSDBデータベースの定義例については,「11.11.2 SDBデータベースの定義例(4V DAMの場合)」を参照してください。
-
- 《規則》
-
-
構成要素名は,格納レコード名と対応する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
-
(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エリア分割キー値の指定形式を次の表に示します。
表11‒59 データ型ごとのレコード型の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
−
×
−
-
-
二次インデクスに指定する構成要素の定義例を次に示します。
-
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ポインタを持たせる場合に指定します。
(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によるデータ操作時
-
不正データのチェック時
-
-
レコード型の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
- 《規則》
-
データベースのキー値に関する規則
-
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つだけ指定してください。
-