14.4.8 STORE(レコードの格納)
(1) 機能
1つのレコード実現値を格納します。
(2) 指定形式
STORE レコード名 SET 構成要素名=格納値〔,構成要素名=格納値〕… 〔DIRECTION {NEXT|PRIOR}〕 〔USERPTROPT {SET|NOSET}〕 〔PAGESWITCH {CHANGE|OCCUPY|NOUSE}〕 〔PCTFREEVAL {YES|NO}〕 〔SECIDXSUP {YES|NO}〕 〔PAGENUM 事前割り当てページ数〕;
- 注意事項
-
-
最後にセミコロン( ; )の指定が必要です。
-
オペランドの指定順序は変更できません。
-
(3) オペランドの説明
- ●レコード名
-
〜<識別子>((1〜30バイト))
レコード実現値を格納するレコード名を指定します。
4V AFMのSDBデータベースの場合は,子レコード名を指定します。
レコード名に英小文字を使用している場合は,レコード名を引用符( " )で囲んでください。引用符で囲まないと,英小文字は英大文字と見なされます。
- ●SET 構成要素名=格納値〔,構成要素名=格納値〕…
-
構成要素名:〜<識別子>((1〜30バイト))
格納するレコードの値を,レコード定義に指定した構成要素の順に指定します。
指定規則を次に示します。
-
最下位レベルの構成要素(基本項目)に対する格納値を指定してください。
-
指定が必要な構成要素をすべて指定してください。
-
指定が必要な構成要素については,「付録K.3 入力情報とキーの定義の関係【4V FMB,4V AFM】」を参照してください。「付録K.3 入力情報とキーの定義の関係【4V FMB,4V AFM】」を参照する際,pdsdbexeコマンドの場合,「レコード型名指定あり」の条件が該当します。
-
指定が必要な構成要素については,#USAGEコマンドの実行結果で確認できます。#USAGEコマンドの実行結果に表示されたひな形のSETオペランドに出力されている構成要素を,出力されている順にすべて指定してください。#USAGEコマンドについては,「14.6.3 #USAGE(DMLコマンドのひな形の出力)」を参照してください。
-
構成要素名は,指定が必要な構成要素の個数まで指定できます。
-
構成要素名に英小文字を使用している場合は,構成要素名を引用符( " )で囲んでください。引用符で囲まないと,英小文字は英大文字と見なされます。
-
格納値の指定形式を次の表に示します。
表14‒15 格納値の指定形式 項番
構成要素のデータ型
格納値の形式※
指定例
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'
- 注※
-
各定数の表記方法については,マニュアル「HiRDB Version 9 SQLリファレンス」の「定数」を参照してください。
-
- ●DIRECTION {NEXT|PRIOR}
-
- NEXT:
-
格納位置をNEXT方向に検索します。
格納対象のレコード型に位置指示子が位置づいている場合は,位置づいているレコード実現値を基点にし,NEXT方向に検索します。位置指示子が空値の場合は,親のFIRSTポインタを基点にし,NEXT方向に検索します。
- PRIOR:
-
格納位置をPRIOR方向に検索します。
格納対象のレコード型に位置指示子が位置づいている場合は,位置づいているレコード実現値を基点にし,PRIOR方向に検索します。位置指示子が空値の場合は,親のLASTポインタを基点にし,PRIOR方向に検索します。
SDBデータベース定義のORDERオペランドにSORTED DUPLICATES PROHIBITEDを指定しているときにこのオペランドを省略した場合は,NEXTが仮定されます。
なお,次の場合は,このオペランドの指定は無視されます。
-
4V FMBのSDBデータベースのルートレコードの格納時
-
SDBデータベース定義のORDERオペランドにLASTを指定したSDBデータベースの場合
- ●USERPTROPT {SET|NOSET}
-
SET:格納するレコード実現値をUSERポインタに設定します。
NOSET:格納するレコード実現値をUSERポインタに設定しません。
このオペランドを省略した場合は,ポインタオプションを使用しません。格納対象がUSERポインタを持たないレコード型の場合は,このオペランドを省略してください。
USERポインタの設定については,「2.5.6(1) USERポインタの設定【4V FMB】」を参照してください。
- ●PAGESWITCH {CHANGE|OCCUPY|NOUSE}
-
サブページ分割をしている場合は,ページをサブページに読み替えてください。
- CHANGE:
-
レコード格納時にページを切り替えて,新規ページを確保します。
- OCCUPY:
-
レコード格納時にページを切り替えて,新規ページを確保します。確保したページは,格納したレコードで占有します(ほかのレコードを格納しません)。
- NOUSE:
-
ページ切り替えオプションを指定しません。
なお,一括削除後のレコードの格納時,内部でレコードの検索または更新を行う場合は,このオペランドの指定は無視されます。
- ●PCTFREEVAL {YES|NO}
-
SDBデータベース格納定義のPCTFREEオペランドの指定を有効にするかどうかを指定します。
サブページ分割をしている場合は,ページをサブページに読み替えてください。
- YES:
-
SDBデータベース格納定義のPCTFREEオペランドの指定を有効にします。レコード格納時,SDBデータベース格納定義のPCTFREEオペランドに指定したページ内の未使用領域の比率を適用します。
- NO:
-
SDBデータベース格納定義のPCTFREEオペランドの指定を有効にしません。レコード格納時,SDBデータベース格納定義のPCTFREEオペランドに指定したページ内の未使用領域の比率を適用しません。
なお,一括削除後のレコードの格納時,内部でレコードの検索または更新を行う場合は,このオペランドの指定は無視されます。
- ●SECIDXSUP {YES|NO}
-
二次インデクスを使用するかどうかを指定します。
YES:二次インデクスが使用できる場合でもポインタ検索を行います。
NO:二次インデクスが使用できる場合は,二次インデクスを使用して検索を行います。
二次インデクスについては,「2.3.10 二次インデクス【4V FMB,4V AFM】」を参照してください。
- ●PAGENUM 事前割り当てページ数 〜<符号なし整数>(0〜2,147,483,647)
-
事前割り当てページ数または事前割り当てサブページ数を指定します。
事前ページ割り当て機能については,「2.6.2(4) 事前ページ割り当て機能【4V FMB】」または「2.7.2(4) 事前ページ割り当て機能【4V FMB】」を参照してください。
(4) 使用例
STOREコマンドを実行してレコード実現値を格納する手順を次に示します。
手順
-
STOREコマンドを実行する
STORE "FMB101" SET "USERDB0"='DATA' PCTFREEVAL YES;
-
格納対象のレコードが正しいかを確認する
STORE RECORD INFORMATION RECORD KIND : CHILD RECORD DBKEY : X'4141414101020304' AGREE TO STORE ? [ENTER YES OR NO] YES ←上記の情報を確認後,YESを指定します。
STOREコマンドを実行してよいかどうかの確認メッセージが表示されます。
格納対象のレコード種別(RECORD KIND),および格納対象レコードのDBKEY(DBKEY)を確認してから,YESをしてください。
- 参考
-
格納対象のレコード種別などに誤りがある場合は,NOを指定してSTOREコマンドの実行を中止してください。
-
STOREコマンドの実行結果を確認する
STORE INFORMATION STORE SERIAL NUM : 1 ROWID : X'070000001900000000000200' SECOND INDEX KIND : NOUSE RECORD POINTER STATUS : FIRST_LAST KFPB64050-I STORE command processing completed
STOREコマンドの実行結果が表示されます。
(5) STOREコマンドの実行時に表示される情報
STOREコマンドを実行した場合に表示される情報について説明します。
(a) STOREコマンドの実行確認メッセージ
STOREコマンドを実行した際,次に示す確認メッセージが表示されます。
STORE RECORD INFORMATION RECORD KIND : CHILD RECORD ...1 DBKEY : X'4141414101020304' ...2 AGREE TO STORE ? [ENTER YES OR NO] ...3
- [説明]
-
-
格納対象のレコード種別が表示されます。
ROOT RECORD:格納対象レコードがルートレコードであることを意味しています。
CHILD RECORD:格納対象レコードが子レコードであることを意味しています。
-
格納対象レコードの親レコードのDBKEYが表示されます。
格納対象レコードが子レコードの場合に,この項目が表示されます。
親レコードがルートレコードの場合,親レコードのDBKEYが表示されます。親レコードがルートレコードでない場合,親レコードの一連番号が表示されます。
4V AFMのSDBデータベースの場合の留意事項を次に示します。
・DBKEYの構成要素が1つも指定されていない場合,この項目は表示されません。
・DBKEYのうち,指定されていない部分は0x00が指定されたと見なされます。
-
STOREコマンドを実行するかどうかの確認メッセージが表示されます。
レコード種別および親レコードのDBKEYを確認(1.および2.の情報を確認)し,問題がない場合はYESまたはyesを指定してください。
STOREコマンドの実行を中止する場合は,NOまたはnoを指定してください。
- 参考
-
YESまたはyes以外を指定した場合,NOが指定されたと見なされます。
-
(b) STOREコマンドの実行結果
STOREコマンドの実行が終了した際,次に示す実行結果が表示されます。
STORE INFORMATION STORE SERIAL NUM : 20 ...1 ROWID : X'880000001900000000000100' ...2 USER POINTER : OPERATED ...3 USER POINTER SERIAL NUM : 20 ...4 SECOND INDEX KIND : USER KEY INDEX ...5 RECORD POINTER STATUS : LAST ...6
- [説明]
-
-
格納したレコードの一連番号が表示されます。
-
格納したレコードのROWIDが表示されます。
-
USERポインタを操作したかどうかが表示されます。
USERポインタを操作した場合は,OPERATEDが表示されます。USERポインタを操作していない場合は,この項目は表示されません。
-
USERポインタを操作した場合,USERポインタが示す一連番号が表示されます。USERポインタを操作していない場合は,この項目は表示されません。
-
二次インデクスを使用したかどうかが表示されます。
NOUSE:二次インデクスは使用されていません。
SERIAL NUM INDEX:一連番号を指定した二次インデクスが使用されました。
USER KEY INDEX:ユーザキーを指定した二次インデクスが使用されました。
-
レコード格納時のレコードポインタ情報が表示されます。
FIRST:格納したレコードは,FIRSTポインタで示されています。
LAST:格納したレコードは,LASTポインタで示されています。
FIRST LAST:格納したレコードは,FIRSTポインタおよびLASTポインタで示されています。
NONE:格納したレコードは,FIRSTポインタおよびLASTポインタのどちらでも示されていません。
-
(6) 留意事項
-
STOREコマンドは,個別開始している状態で実行してください。
-
子レコードにレコードを格納する場合,親レコードまでの位置づけをしておいてください。位置づけをしていない場合は,エラーになります。
-
構成要素のデータ型とデータ属性が一致している格納値を指定する必要があります。格納値のパディング(データを追加して長さを合わせる処理)や,切り捨てなどのデータの加工は行われません。また,データ型によっては,次の条件を満たす必要があります。
-
データ型がCHARACTERまたはXCHARACTERの場合
データ長が一致している必要があります。
-
データ型がPACKED DECIMAL FIXEDまたはINTEGERの場合
格納値が,構成要素のデータ型で表現できる範囲の値である必要があります。また,格納値を16進文字列定数で指定した場合,格納値の長さは,構成要素の長さと同じである必要があります。
なお,データ型がPACKED DECIMAL FIXEDの場合,格納値に指定した文字数で整数部桁数および小数部桁数が決まります。
(例)
01234.000 → 整数部桁数5,小数部桁数3
.12345 → 整数部桁数0,小数部桁数5
上記の例のようにゼロサプレスされません。格納値の整数部桁数および小数部桁数が,構成要素の整数部桁数および小数部桁数以下になるようにしてください。
-
-
STOREコマンドが正常終了したあとに#EXITコマンドを実行する場合は,次のようにpdsdbexe操作コマンドを実行してください。
-
レコードの格納を実行したトランザクションを正常終了させたい場合は,COMMITコマンドを実行してください。
-
レコードの格納を実行したトランザクションを取り消したい場合は,ROLLBACKコマンドを実行してください。
-