dc_tam_read
- 〈このページの構成〉
形式
ANSI C,C++の形式
#include <dctam.h> int dc_tam_read(DCLONG tblid,struct DC_TAMKEY *keyadr, int keyno, char *bufadr,int bufsize,DCLONG flags)
K&R版 C の形式
#include <dctam.h> int dc_tam_read(tblid,keyadr,keyno,bufadr,bufsize,flags) DCLONG tblid; struct DC_TAMKEY *keyadr; int keyno; char *bufadr; int bufsize; DCLONG flags;
機能
flagsに設定した検索種別に従って,TAMテーブル上のレコードを参照または更新の目的で入力します。検索種別とインデクス種別の関係を次の表に示します。
検索種別 |
検索処理の概要 |
|
---|---|---|
インデクス種別:ハッシュ |
インデクス種別:ツリー |
|
'キー値='検索 |
設定したキー値を持つレコードを検索します。 設定したキー値を持つレコードがない場合はエラーリターンします。 |
設定したキー値を持つレコードを検索します。 設定したキー値を持つレコードがない場合はエラーリターンします。 |
'キー値<='検索 |
エラーリターンします。 |
設定したキー値以上のキー値を持つレコードを検索します。 |
'キー値<'検索 |
エラーリターンします。 |
設定したキー値より大きいキー値を持つレコードを検索します。 |
'キー値>='検索 |
エラーリターンします。 |
設定したキー値以下のキー値を持つレコードを検索します。 |
'キー値>'検索 |
エラーリターンします。 |
設定したキー値より小さいキー値を持つレコードを検索します。 |
先頭検索※ |
キー値に対応してハッシングをした先頭レコードを検索します。keyadrに設定したキー値は無視します。 |
エラーリターンします。 |
NEXT検索※ |
キー値に対応してハッシングをした,次のレコードを検索します。 |
エラーリターンします。 |
参照目的の入力で排他を掛ける場合,参照排他でテーブル排他とレコード排他を確保します。レコード排他でオープンしたTAMテーブルを更新目的で入力する場合は,参照排他でテーブル排他を確保し,更新排他でレコード排他を確保します。
dc_tam_read関数がエラーリターンした場合は,この関数内で設定した資源はすべて解放して,関数を呼び出す前の状態に戻ります。ただし,関数を呼び出す前に参照排他で確保されていたレコードを更新目的で入力した場合は,更新排他となり参照排他には戻りません。また,エラーリターンした場合には,バッファの内容は保証できません。
複数のレコードを設定して入力する場合,それらのレコードのうち一つでもエラーが発生したときは,この関数で設定した全レコードの処理をエラーとします。
UAPで値を設定する引数
●tblid
レコードを入力するTAMテーブルの,テーブル記述子を設定します。テーブル記述子はdc_tam_open関数で返された値です。
●keyadr
レコードを検索するための,キー値のアドレスを持つ構造体のアドレスを設定します。構造体の形式は次のとおりです。
struct DC_TAMKEY { char *keyname; };
-
keyname
キー値のアドレスを設定します。キー値は入力するレコードのキー領域の長さで設定します。
●keyno
要求レコード数(keyadrで設定する構造体の数)を設定します。
●bufadr
レコードを入力するバッファのアドレスを設定します。
●bufsize
レコードを入力するバッファの長さを設定します。バッファ長は(レコード長×要求レコード数)以上にします。
●flags
レコードの検索種別,アクセス種別,参照目的の排他のときの排他要否種別を設定します。また,排他を掛ける場合に,資源の競合が起こったときの排他解除待ち種別を設定します。
{フラグ1}|{DCTAM_REFERENCE〔|{DCTAM_EXCLUSIVE|DCTAM_NOEXCLUSIVE}〕|DCTAM_MODIFY}〔|{DCTAM_WAIT|DCTAM_NOWAIT}〕
-
フラグ1
フラグ1には,次のレコードの検索種別のうちどれか一つを指定してください。
レコードの検索種別の設定は省略できません。また,検索種別は重複して設定できません。
DCTAM_EQLSRC…'キー値='を検索する(ハッシュ,ツリー)。
DCTAM_GRTEQLSRC…'キー値<='を検索する(ツリー)。
DCTAM_GRTSRC…'キー値<'を検索する(ツリー)。
DCTAM_LSSEQLSRC…'キー値>='を検索する(ツリー)。
DCTAM_LSSSRC…'キー値>'を検索する(ツリー)。
DCTAM_FIRSTSRC…先頭から検索する(ハッシュ)。
DCTAM_NEXTSRC…設定したキー値の,次のレコードから検索する(ハッシュ)。
-
フラグ2
レコードのアクセス種別の設定も省略できません。また,アクセス種別も重複して設定できません。
DCTAM_REFERENCE…参照目的の排他
DCTAM_MODIFY…更新目的の排他
-
フラグ3
参照目的の排他の場合は,排他するかどうかを設定します。排他要否種別は重複して設定できません。このフラグの設定を省略した場合は,DCTAM_NOEXCLUSIVEが仮定されます。
DCTAM_EXCLUSIVE…排他します。
DCTAM_NOEXCLUSIVE…排他をしません。
排他しないでdc_tam_read 関数を呼び出した場合,dc_tam_read関数の処理中にほかのUAPから該当するTAMレコードが更新されることがあります。この場合,dc_tam_read関数で入力するレコードの内容は,ほかのUAPでの更新処理の状態(コミット処理が完了するタイミング)に依存します。したがって,UAP間でデータの整合性をとるためには,必ずDCTAM_EXCLUSIVEを指定してください。DCTAM_NOEXCLUSIVEは,参照型のTAMテーブルの場合や,同一のTAMレコードに対して業務処理全体として参照と更新が競合する可能性がない場合に使用します。
-
フラグ4
排他解除待ち種別も重複して設定できません。このフラグの設定を省略した場合は,DCTAM_NOWAITが仮定されます。
DCTAM_WAIT…排他解除待ちをします。
DCTAM_NOWAIT…待たないで,エラーリターンします。
flagsに設定する値と,設定内容について次に示します。
フラグ1 |
フラグ2 |
フラグ3※1 |
フラグ4※2 |
flagsの設定内容 |
---|---|---|---|---|
EQLSRC GRTEQLSRC GRTSRC LSSEQLSRC LSSSRC FIRSTSRC NEXTSRC |
REFERENCE |
EXCLUSIVE |
WAIT |
参照目的,排他あり, 排他エラー時は解除待ち |
NOWAIT |
参照目的,排他あり, 排他エラー時はエラーリターン |
|||
NOEXCLUSIVE |
× |
参照目的,排他なし |
||
MODIFY |
− |
WAIT |
更新目的, 排他エラー時は解除待ち |
|
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_IDXTYP |
-1729 |
TAMテーブルファイルの初期作成で設定したTAMテーブルのインデクス種別では実行できません。 |
DCTAMER_ACSATL |
-1730 |
TAMサービス定義で設定したTAMテーブルのアクセス形態では実行できません。 |
DCTAMER_NOREC |
-1731 |
flagsに設定した検索条件を満たすレコードがありません。 |
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_read関数を呼び出したUAPには,アクセス権限がありません。 |