14.4.3 FETCH(レコードの検索)
(1) 機能
1つのレコード実現値を取得します。また,操作対象レコードの位置づけを行います。
(2) 指定形式
FETCH レコード名 {FIRST|LAST|NEXT|PRIOR} 〔WHERE {キーの条件 〔AND キー以外の条件〕|キー以外の条件}〕 〔TERMOPT {YES|NO}〕 〔SECIDXSUP {YES|NO}〕;
- 注意事項
-
-
最後にセミコロン( ; )の指定が必要です。
-
オペランドの指定順序は変更できません。
-
(3) オペランドの説明
- ●レコード名
-
〜<識別子>((1〜30バイト))
検索対象のレコード名を指定します。
4V AFMのSDBデータベースの場合は,子レコード名を指定します。
レコード名に英小文字を使用している場合は,レコード名を引用符( " )で囲んでください。引用符で囲まないと,英小文字は英大文字と見なされます。
- ●{FIRST|LAST|NEXT|PRIOR}
-
検索で使用するポインタを指定します。
FIRST:FIRSTポインタから検索します。
LAST:LASTポインタから検索します。
NEXT:NEXTポインタから検索します。
PRIOR:PRIORポインタから検索します。
ポインタの詳細については,「2.5.4(2) 検索の基点となるレコードと検索の方向」,および「2.5.4(3) レコードの検索範囲」を参照してください。
4V TAMのSDBデータベースのレコードの検索でNEXTを指定した場合,実行結果は保証できません。4V TAMのSDBデータベースのレコードの検索ではFIRSTを指定してください。
- ●WHERE {キーの条件 〔AND キー以外の条件〕|キー以外の条件}
-
検索条件を指定します。
キーの条件とキー以外の条件の両方を指定する場合は,それぞれを( )で囲み論理積(AND)で結合します。
- キーの条件::=
-
(DBKEY{=|<|<=|>|>=}条件値1
〔AND DBKEY{=|<|<=|>|>=}条件値1〕)
- 条件値1 ::=
-
{DBKEYに対応する値|
(構成要素に対応する値〔,構成要素に対応する値〕...)}
検索条件を指定します。
DBKEYに対応する値として,DBKEYの構成要素全体に対して1つの値を指定してください。
DBKEYに対応する値の指定形式を次の表に示します。
表14‒8 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‒9 構成要素に対応する値の指定形式 項番
構成要素のデータ型
条件値の形式※
指定例
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個指定する場合は,キーの条件が範囲指定となるように指定してください。範囲指定かどうかは,キー(DBKEYの構成要素)全体をXCHARACTER(16進データ)と見なして判定します。ただし,一連番号については,INTEGERで判定します。
-
ユーザキーの定義がある4V FMBのSDBデータベースの子レコードに対して, DBKEY(一連番号)の条件を指定する場合は,比較記号に'='だけが指定できます。それ以外を指定した場合は,エラーとなります。
-
格納条件分割をしたレコードの場合,基点条件の条件値のRDエリア分割キー値が,SDBデータベース格納定義のWITHIN句で指定されたRDエリア分割キー値でないときは,エラーとなります。
-
- キー以外の条件::=
-
(構成要素名{=|<>|^=|!=|<|<=|>|>=}条件値2
〔{AND|OR} 構成要素名{=|<>|^=|!=|<|<=|>|>=}条件値2〕…)
- 条件値2::=構成要素に対応する値
-
検索条件を指定します。
構成要素に対応する値の指定形式を次の表に示します。
表14‒10 構成要素に対応する値の指定形式 項番
構成要素のデータ型
条件値の形式※
指定例
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'
キー以外の条件の指定規則を次に示します。
-
キー以外の条件に,DBKEYを指定する条件は指定できません。
-
9バイト以上の構成要素名は指定できません。そのため,条件式に指定する構成要素名は,8バイト以下で定義しておいてください。
-
キー以外の条件に指定できる構成要素は,基本項目の構成要素だけです。集団項目の構成要素は指定できません。
-
キー以外の条件は8個まで指定できます。ただし,キーの条件も一緒に指定する場合は,キー以外の条件の指定数の上限は,「8−キーの条件数」になります。
-
ユーザキーとユーザキー以外の条件は,論理積(AND)で結合します。
-
ユーザキーを条件式に指定する場合,次のことに注意してください。
・条件の先頭から指定する必要があります。
・条件は2個まで指定できます。
・条件を2個指定する場合は,範囲指定になるように指定する必要があります。
-
ユーザキーの条件を指定する場合,キーの条件は指定できません。
-
ユーザキーの条件に,比較記号「<>」,「^=」,「!=」は指定できません。
-
ユーザキーの条件に,論理和(OR)は指定できません。
-
- ●TERMOPT {YES|NO}
-
検索条件に該当するレコードがなく,検索結果がNOT FOUNDのときに,レコードの終端を検知したかどうかの判定を,HiRDB/SDが行うかどうかを指定します。
- YES:
-
レコードの終端を検知したかどうかを判定します。
- NO:
-
レコードの終端を検知したかどうかを判定しません。
- ●SECIDXSUP {YES|NO}
-
二次インデクスを使用するかどうかを指定します。
- YES:
-
二次インデクスが使用できる場合でもポインタ検索を行います。
- NO:
-
二次インデクスが使用できる場合は,二次インデクスを使用して検索を行います。
二次インデクスについては,「2.3.10 二次インデクス【4V FMB,4V AFM】」を参照してください。
(4) 使用例
- ■4V FMBのSDBデータベースのルートレコードの検索例
FETCH "FMB1000" FIRST;
次の実行結果が表示されます。
FETCH INFORMATION FETCH DATA 1 "KEYDATA1" 'AAAA' 2 "KEYDATA2" 'BBBB' 3 "USERDA0" 123.45 ROWID : X'070000001900000000000100' PAGE NUM : 100 KFPB64050-I FETCH command processing completed
- ■4V FMBのSDBデータベースの子レコードの検索例
FETCH "FMB101" FIRST;
次の実行結果が表示されます。
FETCH INFORMATION FETCH DATA 1 "DBKEY" 1 2 "USERDB0" 'bbbb' FETCH SERIAL NUM : 1 ROWID : X'070000001900000000000200' USER POINTER SERIAL NUM : 0 SECOND INDEX KIND : NOUSE RECORD POINTER STATUS : FIRST_LAST KFPB64050-I FETCH command processing completed
- ■4V AFMのSDBデータベースの子レコードの検索例
FETCH "RECB" FIRST;
次の実行結果が表示されます。
FETCH INFORMATION FETCH DATA 1 "DBKEY_KN" 1 2 "USERDATA1" 'AAAA' FETCH SERIAL NUM : 1 ROWID : X'400000001200000000000100' SECOND INDEX KIND : NOUSE RECORD POINTER STATUS : FIRST_LAST KFPB64050-I FETCH command processing completed
(5) FETCHコマンドの実行時に表示される情報
FETCHコマンドの実行が終了した際,次に示す実行結果が表示されます。
FETCH INFORMATION FETCH DATA 1 "OCNUM" 1 ...1 2 "USERDATA" '00000001' ...1 FETCH SERIAL NUM : 1 ...2 ROWID : X'280000001900000000008000' ...3 USER POINTER SERIAL NUM : 0 ...4 SECOND INDEX KIND : NOUSE ...5 RECORD POINTER STATUS : FIRST ...6 FETCH TERMINATED : NOUSE ...7 PAGE NUM : 100 ...8
- [説明]
-
上記のすべての情報が常に表示される訳ではありません。検索対象のレコードや,検索結果によって表示される項目が異なります。
-
構成要素の通番,構成要素名,検索データが表示されます。
検索データは次の形式で表示されます。
項番
構成要素のデータ型
検索データの表示形式
表示例
1
CHARACTER
文字列定数の形式で表示されます。
'aaabbb'
2
XCHARACTER
16進文字列定数の形式で表示されます。
X'01020304'
3
PACKED DECIMAL FIXED
10進数定数の形式で表示されます。
123.456
4
INTEGER
整数定数の形式で表示されます。
100
各定数の形式については,マニュアル「HiRDB SQLリファレンス」の「定数」を参照してください。
-
検索したレコードの一連番号が表示されます。
-
検索したレコードのROWIDが表示されます。
-
USERポインタのレコードの一連番号の情報が返却された場合,USERポインタが示す一連番号が表示されます。一連番号の情報が返却されなかった場合は,この項目は表示されません。
なお,一連番号の情報は,子レコードの最初の検索時だけ返却されます。
-
二次インデクスの使用有無が表示されます。
NOUSE:二次インデクスは使用されませんでした。
SERIAL NUM INDEX:一連番号を指定した二次インデクスが使用されました。
USER KEY INDEX:ユーザキーを指定した二次インデクスが使用されました。
-
レコード格納時のレコードポインタ情報が表示されます。
FIRST:検索したレコードは,FIRSTポインタで示されています。
LAST:検索したレコードは,LASTポインタで示されています。
FIRST_LAST:検索したレコードは,FIRSTポインタおよびLASTポインタで示されています。
NONE:検索したレコードは,FIRSTポインタおよびLASTポインタのどちらにも示されていません。
-
終端検知をしたかどうかが表示されます。
YES:終端検知しました。
NO:終端検知しませんでした。
NOUSE:終端検知機能を使用しませんでした。
-
検索したルートレコードが属するファミリの事前割り当てページ数または事前割り当てサブページ数が出力されます。
-
(6) 留意事項
-
FETCHコマンドは,個別開始している状態で実行してください。
-
検索条件の条件値は,DBKEYまたは構成要素のデータ型とデータ属性が一致している必要があります。pdsdbexeコマンドは,パディング(データを追加して長さを合わせる処理)や,切り捨てなどのデータの加工を行いません。また,データ型によっては,次の条件を満たす必要があります。
-
データ型がCHARACTERまたはXCHARACTERの場合
データ長が一致している必要があります。
-
データ型がPACKED DECIMAL FIXEDまたはINTEGERの場合
条件値が,構成要素のデータ型で表現できる範囲の値である必要があります。また,条件値を16進文字列定数で指定した場合,条件値の長さは,構成要素の長さと同じである必要があります。
なお,データ型がPACKED DECIMAL FIXEDの場合,条件値に指定した文字数で整数部桁数および小数部桁数が決まります。
(例)
01234.000 → 整数部桁数5,小数部桁数3
.12345 → 整数部桁数0,小数部桁数5
上記の例のようにゼロサプレスされません。条件値の整数部桁数および小数部桁数が,構成要素の整数部桁数および小数部桁数以下になるようにしてください。
-