CBLDCTAM('FxxR'/'FxxU'/'VxxR'/'VxxU')
- 〈このページの構成〉
形式
PROCEDURE DIVISIONの指定
CALL 'CBLDCTAM' USING 一意名1 一意名2 一意名3 一意名4
DATA DIVISIONの指定
01 一意名1. 02 データ名A PIC X(4). 02 データ名B PIC X(5). 02 FILLER PIC X(3). 02 データ名C PIC X(32). 02 FILLER PIC X(68). 02 データ名D PIC S9(4) COMP. 02 FILLER PIC X(2). 02 データ名J PIC S9(9) COMP. 02 FILLER PIC X(392). 01 一意名2. 02 データ名E PIC X(4). 02 データ名F PIC X(1). 02 FILLER PIC X(2). 02 データ名I PIC X(1). 01 一意名3. 02 データ名G PIC X(m). 01 一意名4. 02 データ名H PIC X(n).
機能
データ名Eに設定した検索種別に従って,TAMテーブル上のレコードを,参照または更新の目的で入力します。検索種別とインデクス種別の関係を次の表に示します。
検索種別 |
検索処理の概要 |
|
---|---|---|
インデクス種別:ハッシュ |
インデクス種別:ツリー |
|
'キー値='検索 |
設定したキー値を持つレコードを検索します。 設定したキー値を持つレコードがない場合はエラーリターンします。 |
設定したキー値を持つレコードを検索します。 設定したキー値を持つレコードがない場合はエラーリターンします。 |
'キー値<='検索 |
エラーリターンします。 |
設定したキー値以上のキー値を持つレコードを検索します。 |
'キー値<'検索 |
エラーリターンします。 |
設定したキー値より大きいキー値を持つレコードを検索します。 |
'キー値>='検索 |
エラーリターンします。 |
設定したキー値以下のキー値を持つレコードを検索します。 |
'キー値>'検索 |
エラーリターンします。 |
設定したキー値より小さいキー値を持つレコードを検索します。 |
先頭検索※ |
キー値に対応してハッシングをした先頭レコードを検索します。データ名Gに設定したキー値は無視します。 |
エラーリターンします。 |
NEXT検索※ |
キー値に対応してハッシングをした,次のレコードを検索します。 |
エラーリターンします。 |
- 注※
-
インデクス種別がハッシュで,TAMテーブルファイルの初期作成時に,データ部にキー値を付けている(tamcreコマンドに-sオプションを設定していない)場合,先頭検索とNEXT検索を使って,TAMテーブル上の全レコードを検索できます。
API発行に伴い,次の排他を確保します。
-
参照目的で入力する場合,対象テーブル/対象レコードともに参照排他で確保します。
-
更新目的で入力する場合,対象テーブルを参照排他,対象レコードを更新排他でそれぞれ確保します。
ただし,TAMサービス定義のtam_tbl_lock_modeオペランドでNOLOCKを指定している場合,アクセス形態が「参照型」または「追加・削除できない更新型」のテーブルには,テーブル排他を確保しません。
TAMテーブルのレコード入力がエラーリターンした場合は,このプログラムで設定した資源はすべて解放して,プログラムを呼び出す前の状態に戻ります。ただし,プログラムを呼び出す前に参照排他で確保されていたレコードを更新目的で入力した場合は,更新排他となり参照排他には戻りません。また,エラーリターンした場合には,バッファの内容は保証できません。
UAPで値を設定するデータ領域
●データ名A
TAMの識別子を設定します。ただし,TAMサービスではこの値を参照しません。
●データ名C
入力するレコードのTAMテーブル名を32文字以内で設定します。32文字未満の場合は,後ろを空白で埋めます。
●データ名D
入力するレコードが,1〜32767バイト以下のときのバッファ長を設定します。バッファ長は,レコード長以上にします。データ名Eに「VALUE 'Fxxx'」を設定した場合だけ,この設定は有効になります。
●データ名J
入力するレコードが32768バイト以上のときのバッファ長を設定します。バッファ長は,レコード長以上にします。データ名Eに「VALUE 'Vxxx'」を設定した場合だけ,この設定は有効になります。
●データ名E
要求コードを設定します。
VALUE 'FCHR',VALUE 'VCHR'…参照目的で'キー値='を検索する(ハッシュ,ツリー)。
VALUE 'FGER',VALUE 'VGER'…参照目的で'キー値<='を検索する(ツリー)。
VALUE 'FGTR',VALUE 'VGTR'…参照目的で'キー値<'を検索する(ツリー)。
VALUE 'FLER',VALUE 'VLER'…参照目的で'キー値>='を検索する(ツリー)。
VALUE 'FLTR',VALUE 'VLTR'…参照目的で'キー値>'を検索する(ツリー)。
VALUE 'FTPR',VALUE 'VTPR'…参照目的で設定したキー値の,先頭から検索する(ハッシュ)。
VALUE 'FNXR',VALUE 'VNXR'…参照目的で設定したキー値の,次のレコードから検索する(ハッシュ,ツリー)。
VALUE 'FCHU',VALUE 'VCHU'…更新目的で'キー値='を検索する(ハッシュ,ツリー)。
VALUE 'FGEU',VALUE 'VGEU'…更新目的で'キー値<='を検索する(ツリー)。
VALUE 'FGTU',VALUE 'VGTU'…更新目的で'キー値<'を検索する(ツリー)。
VALUE 'FLEU',VALUE 'VLEU'…更新目的で'キー値>='を検索する(ツリー)。
VALUE 'FLTU',VALUE 'VLTU'…更新目的で'キー値>'を検索する(ツリー)。
VALUE 'FTPU',VALUE 'VTPU'…更新目的で設定したキー値の,先頭から検索する(ハッシュ)。
VALUE 'FNXU',VALUE 'VNXU'…更新目的で設定したキー値の,次のレコードから 検索する(ハッシュ,ツリー)。
レコード長が32767バイト以下のTAMテーブルの場合は「VALUE 'Fxxx'」を使用します。
レコード長が32768バイト以上のTAMテーブルの場合は「VALUE 'Vxxx'」を使用します。
●データ名F
参照目的の入力の場合の,排他の要否種別を設定します。
VALUE '△' … 排他する(同期点で排他を解除します)。
VALUE 'D' … 排他する(この文の終了時に排他を解除します)。
VALUE 'N' … 排他しない。
排他しないでCBLDCTAM('FxxR'/'VxxR')を呼び出した場合,CBLDCTAM('FxxR'/'VxxR')処理中にほかのUAPから該当するTAMレコードが更新されることがあります。
この場合,CBLDCTAM('FxxR'/'VxxR')で入力するレコードの内容は,ほかのUAPでの更新処理の状態(コミット処理が完了するタイミング)に依存します。したがって,UAP間でデータの整合性をとるためには,必ずVALUE 'D'またはVALUE '△'を指定してください。
VALUE 'N'は,参照型のTAMテーブルの場合や,同一のTAMレコードに対して業務処理全体として参照と更新が競合する可能性がない場合に使用します。
●データ名G
キー値を設定します。キー値は,検索するレコードのキー領域の長さで設定します。
●データ名H
レコードを入力するデータ領域(バッファ)を設定します。
●データ名I
排他解除待ちの種別を,次に示す値で設定します。データ名Iに設定した値は,TAMサービス定義のtam_cbl_levelに '2' を指定した場合に有効になります。
VALUE 'W' … 排他の解除を待ちます。
VALUE 'N' … 排他の解除を待たないで,エラーリターンします。
TAMサービス定義のtam_cbl_levelに '0' または '1' を指定した場合は,データ名Iを指定する必要はありません。
OpenTP1から値が返されるデータ領域
●データ名B
ステータスコードが,5けたの数字で返されます。
●データ名H
入力したレコードが返されます。
ステータスコード
ステータスコード |
意味 |
---|---|
00000 |
TAMテーブルは正常に入力しました。 |
01701 |
データ名Cに設定したTAMテーブル名が間違っています。 |
01702 |
データ名Gに設定したキー値が間違っています。 |
01704 |
データ名Hに設定した値が間違っています。 |
01705 |
データ名D,またはデータ名Jに設定したバッファ長が短過ぎます。 |
01708 |
データ名E,データ名F,またはデータ名Iに設定した値が間違っています。 |
01709 |
データ名Cに設定したテーブルはTAMテーブルではありません。 |
01710 |
TAMテーブルが定義されていません。 |
01720 |
TAMサービスが終了中です。 |
01721 |
TAMテーブルへアクセスする順序が間違っています。 |
UAPにリンケージしているトランザクション制御用オブジェクトファイルのリソースマネジャ登録が間違っています。または,UAPにトランザクション制御用オブジェクトファイルをリンケージしていません。 |
|
CBLDCTAMを呼び出したUAPのユーザサービス定義に,トランザクション属性なし(atomic_update=N)を指定しています。 |
|
01723 |
TAMテーブルが削除されています。 |
01724 |
TAMテーブルがロードされていません。 |
01727 |
TAMテーブルが論理閉塞状態です。 |
01728 |
TAMテーブルが障害閉塞状態です。 |
01729 |
TAMテーブルファイルの初期作成で設定したTAMテーブルのインデクス種別では実行できません。 |
01730 |
TAMサービス定義で指定したTAMテーブルのアクセス形態では実行できません。 |
01731 |
データ名Eに設定した検索条件を満たすレコードがありません。 |
01736 |
排他エラーが起こりました。TAMサービス定義のtam_cbl_levelオペランドに0を指定した場合,またはtam_cbl_levelオペランドに2を指定してデータ名IにWを設定した場合は,ロックサービス定義で指定した待ち時間のタイムアウトのため,資源を確保できませんでした。 |
01737 |
デッドロックが起こりました。 |
01760 |
UAPが,現在稼働しているTAMテーブルでは動作できないバージョンのTAMライブラリと結合されています。 |
01761 |
UAPが,現在稼働しているOpenTP1ファイルサービスでは動作できないバージョンのTAMライブラリと結合されています。 |
01762 |
UAPが,現在稼働しているTAMサービスでは動作できないバージョンのTAMライブラリと結合されています。 |
01764 |
レコードが破壊されています。 |
01765 |
TAMサービスで管理できるトランザクション数を超えました。 |
01766 |
キャラクタ型スペシャルファイルのオープン数の制限値を超えました。 |
01767 |
スペシャルファイルに対するアクセス権がありません。 |
01768 |
TAMファイルに対するアクセス権がありません。 |
01769 |
メモリが不足しました。 |
01770 |
入出力エラーが起こりました。 |
01771 |
トランザクションサービスでエラーが起こりました。 |
01772 |
オープンしようとしたTAMファイルは,セキュリティ機能で保護されています。該当するファイルに対するACLがありません。 |
01773 |
アクセスしようとしたTAMファイルは,セキュリティ機能で保護されています。TAMテーブルからレコードを入力しようとしたUAPには,アクセス権限がありません。 |