14.4.4 FETCHDB_ALL(複数レコードの検索)
(1) 機能
ルートレコード以下のすべてのレコード実現値を取得します。
(2) 指定形式
FETCHDB_ALL {FIRST|NEXT|SKIP} 〔BUFFER_SIZE データ格納エリアサイズ〕 〔WHERE キーの条件〕 〔UNTIL NOT FOUND〕 〔TERMOPT{YES|NO}〕;
- 注意事項
-
-
最後にセミコロン( ; )の指定が必要です。
-
オペランドの指定順序は変更できません。
-
(3) オペランドの説明
- ●{FIRST|NEXT|SKIP}
-
検索の動作を指定します。
FIRST:条件式で指定されたルートレコードから検索を開始します。
NEXT:前回,複数レコードの検索で検索したレコードの,次のレコードから検索を開始します。
SKIP:前回,複数レコードの検索で検索したファミリの,次のファミリ(次のルートレコード)から検索を開始します。
検索の動作の詳細については,「2.5.10(6) 複数レコードの検索例」を参照してください。
- ●BUFFER_SIZE データ格納エリアサイズ 〜<符号なし整数>(1000〜65535)《MAX(ファミリの最大レコードサイズ×2,1000)》(単位:バイト)
-
検索したファミリのレコード実現値を取得するエリアのサイズを指定します。
データ格納エリアのサイズについては,「2.5.10(5)(a) データ格納エリアの領域長の指定」を参照してください。
- ●WHERE キーの条件
-
検索条件としてキーの条件を指定します。
- キーの条件::=
-
(DBKEY{=|<|<=|>|>=}条件値1
〔AND DBKEY{=|<|<=|>|>=}条件値1〕)
- 条件値1 ::=
-
{DBKEYに対応する値|
(構成要素に対応する値〔,構成要素に対応する値〕...)}
検索条件を指定します。
DBKEYに対応する値として,DBKEYの構成要素全体に対して1つの値を指定してください。
DBKEYに対応する値の指定形式を次の表に示します。
表14‒11 DBKEYに対応する値の指定形式 項番
DBKEYのデータ型
条件値の形式※
指定例
備考
1
CHARACTER
文字列定数
DBKEY='AAABBB'
DBKEYを構成するすべての構成要素のデータ型がCHARACTERの場合
2
16進文字列定数
DBKEY=X'414141424242'
3
INTEGER
整数定数
DBKEY=100
DBKEYが一連番号の場合,またはDBKEYの構成要素数が1つでデータ型がINTEGERの場合
4
16進文字列定数
DBKEY=X'64000000'
5
PACKED DECIMAL FIXED
10進数定数
DBKEY=123.456
DBKEYの構成要素数が1つでデータ型がPACKED DECIMAL FIXEDの場合
6
16進文字列定数
DBKEY=X'0123456C'
7
上記以外
16進文字列定数
DBKEY=X'010241414164000000'
なし
構成要素に対応する値として,DBKEYの1つの構成要素に対して値を指定してください。指定できる値の個数と順序はDBKEYの構成要素と一致させてください。
構成要素に対応する値の指定形式を次の表に示します。
表14‒12 構成要素に対応する値の指定形式 項番
構成要素のデータ型
条件値の形式※
指定例
1
CHARACTER
文字列定数
'AAABBB'
2
16進文字列定数
X'414141424242'
3
XCHARACTER
16進文字列定数
X'01020304'
4
PACKED DECIMAL FIXED
10進数定数
123.456
5
16進文字列定数
X'123C'
6
INTEGER
整数定数
100
7
16進文字列定数
X'64000000'
キーの条件の指定規則を次に示します。
-
キーの条件は2個まで指定できます。
-
キーの条件を2個指定する場合は,キーの条件が範囲指定となるように指定してください。
-
格納条件分割をしたレコードの場合,基点条件の条件値のRDエリア分割キー値が,SDBデータベース格納定義のWITHIN句で指定されたRDエリア分割キー値でないと,エラーになります。
-
- ●UNTIL NOT FOUND
-
複数レコードの検索を,検索結果がNOT FOUNDになるまで繰り返し実行する場合に指定します。
- ●TERMOPT {YES|NO}
-
検索条件に該当するレコードがなく,検索結果がNOT FOUNDのときに,レコードの終端を検知したかどうかの判定を,HiRDB/SDが行うかどうかを指定します。
- YES:
-
レコードの終端を検知したかどうかを判定します。
- NO:
-
レコードの終端を検知したかどうかを判定しません。
(4) 使用例
- ■複数レコードの検索例
FETCHDB_ALL FIRST;
次の実行結果が表示されます。
FETCHDB_ALL INFORMATION SPECIFIED BUFFER_SIZE : 1000 FETCH DATA SIZE : 240 FETCH RECORD NUM : 2 FAMILY RECORD FETCH : COMPLETED PAGE NUM : 100 FETCHDB_ALL RECORD INFORMATION : 1/ 2 FETCH RECORD "FMB1000" 1 "KEYDATA1" X'01' 2 "USERDA0" 'aaaaaaaaaa' FETCHDB_ALL RECORD INFORMATION : 2/ 2 FETCH RECORD "FMB101" 1 "KEYDATA1" X'01' 2 "DBKEY" 1 3 "USERDB0" '1111111111' FETCH SERIAL NUM : 1 USER POINTER RECORD : NO FETCHDB_ALL FAMILY INFORMATION RECOMMENDATION BUFFER_SIZE : 240 KFPB64050-I FETCHDB_ALL command processing completed
(5) FETCHDB_ALLコマンドの実行時に表示される情報
FETCHコマンドの実行が終了した際,次に示す実行結果が表示されます。
FETCHDB_ALL INFORMATION SPECIFIED BUFFER_SIZE : 1000 ...1 FETCH DATA SIZE : 240 ...2 FETCH RECORD NUM : 2 ...3 FAMILY RECORD FETCH : COMPLETED ...4 FETCH TERMINATED : NOUSE ...5 PAGE NUM : 100 ...6 FETCHDB_ALL RECORD INFORMATION : 1/ 2 ...7 FETCH RECORD "FMB1000" ...8 1 "KEYDATA1" X'01' ...9 2 "USERDA0" 'aaaaaaaaaa' ...9 FETCHDB_ALL RECORD INFORMATION : 2/ 2 ...7 FETCH RECORD "FMB101" ...8 1 "KEYDATA1" X'01' ...9 2 "DBKEY" 1 ...9 3 "USERDB0" '1111111111' ...9 FETCH SERIAL NUM : 1 ...10 USER POINTER RECORD : NO ...11 FETCHDB_ALL FAMILY INFORMATION RECOMMENDATION BUFFER_SIZE : 240 ...12
- [説明]
-
上記のすべての情報が常に表示される訳ではありません。検索対象のレコードや,検索結果によって表示される項目が異なります。
7〜11の情報は,検索したレコード数分繰り返し表示されます。
-
複数レコードの検索で使用したデータ格納エリアのサイズが表示されます。
-
データ格納エリアに格納したデータのサイズが表示されます。
-
データ格納エリアに格納したレコード実現値数が表示されます。
-
ファミリのレコード検索が完了したかどうかが表示されます。
COMPLETED:ファミリのすべてのレコードを検索しました。
CONTINUE:ファミリに検索していないレコードがあります。
-
終端検知をしたかどうかが表示されます。
YES:終端検知しました。
NO:終端検知しませんでした。
NOUSE:終端検知機能を使用しませんでした。
-
検索したルートレコードが属するファミリの事前割り当てページ数,または事前割り当てサブページ数が出力されます。
-
検索したレコードの通番と,レコードの総数が表示されます。
-
検索したレコードのレコード名が表示されます。
-
構成要素の通番,構成要素名,検索データが表示されます。
検索データは次の形式で表示されます。
項番
構成要素のデータ型
検索データの表示形式
表示例
1
CHARACTER
文字列定数の形式で表示されます。
'aaabbb'
2
XCHARACTER
16進文字列定数の形式で表示されます。
X'01020304'
3
PACKED DECIMAL FIXED
10進数定数の形式で表示されます。
123.456
4
INTEGER
整数定数の形式で表示されます。
100
各定数の形式については,マニュアル「HiRDB SQLリファレンス」の「定数」を参照してください。
-
検索したレコードの一連番号が表示されます。
-
USERポインタにポイントされているかどうかが表示されます。
YES:USERポインタにポイントされています。
NO:USERポインタにポイントされていません。
-
最少回数でファミリのすべてのレコードを取得するために必要なデータ格納エリアのサイズが表示されます。この値をBUFFER_SIZE指定値の目安としてください。
-
(6) 留意事項
-
FETCHDB_ALLコマンドは,FETCHDB_ALL専用の個別開始(STARTコマンドのFETCHDB_ALL ONLY指定)をしている状態で実行してください。
-
検索条件の条件値は,DBKEYまたは構成要素のデータ型とデータ属性が一致している必要があります。pdsdbexeコマンドは,パディング(データを追加して長さを合わせる処理)や,切り捨てなどのデータの加工を行いません。また,データ型によっては,次の条件を満たす必要があります。
-
データ型がCHARACTERまたはXCHARACTERの場合
データ長が一致している必要があります。
-
データ型がPACKED DECIMAL FIXEDまたはINTEGERの場合
条件値が,構成要素のデータ型で表現できる範囲の値である必要があります。また,条件値を16進文字列定数で指定した場合,条件値の長さは,構成要素の長さと同じである必要があります。
なお,データ型がPACKED DECIMAL FIXEDの場合,条件値に指定した文字数で整数部桁数および小数部桁数が決まります。
(例)
01234.000 → 整数部桁数5,小数部桁数3
.12345 → 整数部桁数0,小数部桁数5
上記の例のようにゼロサプレスされません。条件値の整数部桁数および小数部桁数が,構成要素の整数部桁数および小数部桁数以下になるようにしてください。
-