dc_tam_delete
形式
ANSI C ,C++の形式
#include <dctam.h> int dc_tam_delete(DCLONG tblid,struct DC_TAMKEY *keyadr, int keyno, char *bufadr,int bufsize,DCLONG flags)
K&R版 C の形式
#include <dctam.h> int dc_tam_delete(tblid,keyadr,keyno,bufadr,bufsize,flags) DCLONG tblid; struct DC_TAMKEY *keyadr; int keyno; char *bufadr; int bufsize; DCLONG flags;
機能
キー値に示すレコードを,TAMテーブルから削除します。削除するレコードをバッファに退避することもできます。ただし,この関数がエラーリターンした場合には,バッファの内容は保証できません。
レコード排他でTAMテーブルがオープンしている場合,更新排他でテーブル排他を確保します。
dc_tam_delete関数がエラーリターンした場合は,この関数内で設定した資源はすべて解放して,関数を呼び出す前の状態に戻ります。ただし,関数を呼び出す前に参照排他で確保されていたTAMテーブルを削除しようとした場合は更新排他となり,参照排他には戻りません。
複数のレコードを設定して削除する場合,それらのレコードのうち一つでもエラーが起こったときは,この関数で設定した全レコードの処理をエラーとして,関数を呼び出す前の状態に戻ります。
UAPで値を設定する引数
●tblid
レコードを削除するTAMテーブルの,テーブル記述子を設定します。テーブル記述子は,dc_tam_open関数で返された値です。
●keyadr
削除するレコードのキー値のアドレスを持つ,構造体のアドレスを設定します。構造体の形式は次のとおりです。
struct DC_TAMKEY { char *keyname; };
-
keyname
キー値のアドレスを設定します。キー値は,削除するレコードのキー領域の長さで設定してください。
●keyno
要求レコード数(keyadrで設定する構造体の数)を設定します。
●bufadr
削除するレコードをバッファに退避する場合に,そのバッファのアドレスを設定します。flagsにDCTAM_NOOUTREC(削除するレコードを退避しない)を設定した場合は,この設定は無効です。
●bufsize
削除するレコードをバッファに退避する場合に,そのバッファ長を設定します。返却バッファ長は,(レコード長×要求レコード数)以上にします。flagsにDCTAM_NOOUTREC(削除するレコードを退避しない)を設定した場合は,この設定は無効です。
●flags
レコードのアクセス種別,資源の競合が起こった場合の排他解除待ち種別を,次の形式で設定します。
{DCTAM_NOOUTREC|DCTAM_OUTREC}〔|{DCTAM_WAIT|DCTAM_NOWAIT}〕
-
フラグ1
レコードのアクセス種別の設定は省略できません。アクセス種別は重複して設定できません。
DCTAM_NOOUTREC … 削除するレコードを退避しない。
DCTAM_OUTREC … 削除するレコードを退避する。
-
フラグ2
排他解除待ち種別を省略した場合は,排他解除待ちをしないでエラーリターンします。排他解除待ち種別は重複して設定できません。
DCTAM_WAIT… 排他解除待ちをします。
DCTAM_NOWAIT… 待たないで,エラーリターンします。
リターン値
リターン値 |
リターン値(数値) |
意味 |
---|---|---|
DC_OK |
0 |
TAMテーブルのレコードを正常に削除しました。 |
DCTAMER_PARAM_TID |
-1700 |
tblidに設定したテーブル記述子が間違っています。 |
DCTAMER_PARAM_KEY |
-1702 |
keyadrに設定したキー値が間違っています。 |
DCTAMER_PARAM_KNO |
-1703 |
keynoに設定した値が間違っています。 |
DCTAMER_PARAM_BFA |
-1704 |
bufadrに設定した値が間違っています。 |
DCTAMER_PARAM_BFS |
-1705 |
bufsizeに設定したバッファ長が短過ぎます。 |
DCTAMER_PARAM_FLG |
-1708 |
flagsに設定した値が間違っています。 |
DCTAMER_NOTTAM |
-1709 |
tblidに設定したテーブルはTAMテーブルではありません。 |
DCTAMER_TAMEND |
-1720 |
TAMサービスが終了中です。 |
DCTAMER_PROTO |
-1721 |
TAMテーブルへアクセスする順序が間違っています。 |
UAPにリンケージしているトランザクション制御用オブジェクトファイルのリソースマネジャ登録が間違っています。 または,UAPにトランザクション制御用オブジェクトファイルをリンケージしていません。 |
||
関数を呼び出したUAPのユーザサービス定義に,トランザクション属性なし(atomic_update=N)を指定しています。 |
||
DCTAMER_RMTBL |
-1723 |
TAMテーブルが削除されています。 |
DCTAMER_NOLOAD |
-1724 |
TAMテーブルがロードされていません。 |
DCTAMER_NOOPEN |
-1726 |
TAMテーブルがオープン状態ではありません。 |
DCTAMER_LOGHLD |
-1727 |
TAMテーブルが論理閉塞状態です。 |
DCTAMER_OBSHLD |
-1728 |
TAMテーブルが障害閉塞状態です。 |
DCTAMER_ACSATL |
-1730 |
TAMサービス定義で指定したTAMテーブルのアクセス形態では実行できません。 |
DCTAMER_NOREC |
-1731 |
指定されたレコードは存在しません。 |
DCTAMER_LOCK |
-1736 |
排他エラーが起こりました。flagsにDCTAM_WAITを設定した場合,ロックサービス定義で指定した待ち時間のタイムアウトのため,資源を確保できませんでした。 |
DCTAMER_DLOCK |
-1737 |
デッドロックが起こりました。 |
DCTAMER_TBLVR |
-1760 |
UAPが,現在稼働しているTAMテーブルでは動作できないバージョンのTAMライブラリと結合されています。 |
DCTAMER_FLSVR |
-1761 |
UAPが,現在稼働しているOpenTP1ファイルサービスでは動作できないバージョンのTAMライブラリと結合されています。 |
DCTAMER_RECOBS |
-1764 |
レコードが破壊されています。 |
DCTAMER_TRNNUM |
-1765 |
TAMサービスで管理できるトランザクション数を超えました。 |
DCTAMER_OPENNUM |
-1766 |
キャラクタ型スペシャルファイルのオープン数の制限値を超えました。 |
DCTAMER_ACCESSS |
-1767 |
スペシャルファイルに対するアクセス権がありません。 |
DCTAMER_ACCESSF |
-1768 |
TAMファイルに対するアクセス権がありません。 |
DCTAMER_MEMORY |
-1769 |
メモリが不足しました。 |
DCTAMER_IO |
-1770 |
入出力エラーが起こりました。 |
DCTAMER_TMERR |
-1771 |
トランザクションサービスでエラーが起こりました。 |
DCTAMER_ACCESS |
-1773 |
アクセスしようとしたTAMファイルは,セキュリティ機能で保護されています。dc_tam_delete関数を呼び出したUAPには,アクセス権限がありません。 |
注意事項
ハッシュ形式のTAMテーブルに格納されているレコードを全件削除する場合,次の手順で行ってください。
-
先頭検索して見つかったレコードのキー値を変数1に退避する
-
変数1のキー値を使い,NEXT検索する
-
手順2.で見つかったレコードのキー値を変数2に退避する
-
退避しておいた変数1のキー値のレコードを削除する
-
変数2のキー値を変数1に退避する
-
手順2.がエラーになるまで手順2.から手順5.を繰り返す(NEXT検索する)
-
手順2.がエラーになったあとで,最後に変数1に退避したキー値のレコードを削除する
レコードを全件削除する場合,次に示す手順を実行するとCPUが高負荷になることがありますので注意してください。
-
レコードを先頭検索する
-
手順1.で見つかったレコードを削除する
-
手順1.と手順2.すなわちレコードの先頭検索とレコードの削除を繰り返す