CBLDCTAM('ERS '/'ERSR'/'ZRS '/'ZRSR')
- 〈このページの構成〉
形式
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 FILLER PIC X(3). 02 データ名I PIC X(1). 01 一意名3. 02 データ名F PIC X(m). 01 一意名4. 02 データ名G PIC X(n).
機能
キー値に示すレコードを,TAMテーブルから削除します。削除するレコードをバッファに退避することもできます。ただし,このプログラムがエラーリターンした場合には,バッファの内容は保証できません。
レコードを削除するときは,更新排他でテーブル排他を確保します。
TAMテーブルのレコード削除がエラーリターンした場合は,設定した資源はすべて解放して,プログラムを呼び出す前の状態に戻ります。ただし,プログラムを呼び出す前に参照排他で確保されていたTAMテーブルを削除しようとした場合は,更新排他となり,参照排他には戻りません。
UAPで値を設定するデータ領域
●データ名A
TAMの識別子を設定します。ただし,TAMサービスではこの値を参照しません。
●データ名C
削除するレコードのTAMテーブル名を32文字以内で設定します。32文字未満の場合は,後ろを空白で埋めます。
●データ名D
削除するレコードを退避する場合に,1〜32767バイト以下のバッファ長を設定します。バッファ長は,レコード長以上にします。データ名Eに「VALUE 'ERSR'」を設定した場合だけ,この設定は有効になります。
●データ名J
削除するレコードを退避する場合に,32768バイト以上のバッファ長を設定します。バッファ長は,レコード長以上にします。データ名Eに「VALUE 'ZRSR'」を設定した場合だけ,この設定は有効になります。
●データ名E
要求コードを設定します。
VALUE 'ERS△',VALUE 'ZRS△'…削除するレコードを退避しない削除。
VALUE 'ERSR',VALUE 'ZRSR'…削除するレコードを退避する削除。
レコード長が32767バイト以下のTAMテーブルの場合は「VALUE 'ERS△'」または「VALUE 'ERSR'」を使用します。
レコード長が32768バイト以上のTAMテーブルの場合は「VALUE 'ZRS△'」または「VALUE 'ZRSR'」を使用します。
●データ名F
キー値を設定します。キー値は,削除するレコードのキー領域の長さで設定します。
●データ名G
削除するレコードを退避する場合に,退避するバッファを設定します。データ名Eに「VALUE 'ERS△'」または「VALUE 'ZRS△'」(レコードを退避しない)を設定した場合,この設定は無効です。
●データ名I
排他解除待ちの種別を,次に示す値で設定します。データ名Iに設定した値は,TAMサービス定義のtam_cbl_levelに '2' を指定した場合に有効になります。
VALUE 'W' … 排他の解除を待ちます。
VALUE 'N' … 排他の解除を待たないで,エラーリターンします。
TAMサービス定義のtam_cbl_levelに '0' または '1' を指定した場合は,データ名Iを指定する必要はありません。
OpenTP1から値が返されるデータ領域
●データ名B
ステータスコードが,5けたの数字で返されます。
●データ名G
データ名Eに「VALUE 'ERSR'」または「VALUE 'ZRSR'」を設定したレコードの削除が正常に終了した場合,削除したレコードが退避されます。
ステータスコード
ステータスコード |
意味 |
---|---|
00000 |
レコードを正常に削除しました。 |
01701 |
データ名Cに設定したTAMテーブル名が間違っています。 |
01702 |
データ名Fに設定したキー値が間違っています。 |
01704 |
データ名Gに設定した値が間違っています。 |
01705 |
データ名D,またはデータ名Jに設定したバッファ長が短過ぎます。 |
01708 |
データ名E,またはデータ名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テーブルが障害閉塞状態です。 |
01730 |
TAMサービス定義で指定したTAMテーブルのアクセス形態では実行できません。 |
01731 |
指定されたレコードは存在しません。 |
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には,アクセス権限がありません。 |
注意事項
ハッシュ形式のTAMテーブルに格納されているレコードを全件削除する場合,レコードの先頭検索と,見つかったレコードの削除を繰り返すとCPUが高負荷になることがあります。したがって,レコードを全件削除する場合,次の手順で行ってください。
-
先頭検索して見つかったレコードのキー値を変数1に退避する
-
変数1のキー値を使い,NEXT検索する
-
手順2.で見つかったレコードのキー値を変数2に退避する
-
退避しておいた変数1のキー値のレコードを削除する
-
変数2のキー値を変数1に退避する
-
手順2.がエラーになるまで手順2.から手順5.を繰り返す(NEXT検索する)
-
手順2.がエラーになったあとで,最後に変数1に退避したキー値のレコードを削除する