分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス C言語編
名称
形式
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テーブル上のレコードを参照または更新の目的で入力します。検索種別とインデクス種別の関係を次の表に示します。
表2-3 検索種別とインデクス種別の関係
| 検索種別 | 検索処理の概要 | |
|---|---|---|
| インデクス種別:ハッシュ | インデクス種別:ツリー | |
| 'キー値='検索 | 設定したキー値を持つレコードを検索します。 設定したキー値を持つレコードがない場合はエラーリターンします。 |
設定したキー値を持つレコードを検索します。 設定したキー値を持つレコードがない場合はエラーリターンします。 |
| 'キー値<='検索 | エラーリターンします。 | 設定したキー値以上のキー値を持つレコードを検索します。 |
| 'キー値<'検索 | エラーリターンします。 | 設定したキー値より大きいキー値を持つレコードを検索します。 |
| 'キー値>='検索 | エラーリターンします。 | 設定したキー値以下のキー値を持つレコードを検索します。 |
| 'キー値>'検索 | エラーリターンします。 | 設定したキー値より小さいキー値を持つレコードを検索します。 |
| 先頭検索※ | キー値に対応してハッシングをした先頭レコードを検索します。keyadrに設定したキー値は無視します。 | エラーリターンします。 |
| NEXT検索※ | キー値に対応してハッシングをした,次のレコードを検索します。 | エラーリターンします。 |
参照目的の入力で排他を掛ける場合,参照排他でテーブル排他とレコード排他を確保します。レコード排他でオープンしたTAMテーブルを更新目的で入力する場合は,参照排他でテーブル排他を確保し,更新排他でレコード排他を確保します。
dc_tam_read関数がエラーリターンした場合は,この関数内で設定した資源はすべて解放して,関数を呼び出す前の状態に戻ります。ただし,関数を呼び出す前に参照排他で確保されていたレコードを更新目的で入力した場合は,更新排他となり参照排他には戻りません。また,エラーリターンした場合には,バッファの内容は保証できません。
複数のレコードを設定して入力する場合,それらのレコードのうち一つでもエラーが発生したときは,この関数で設定した全レコードの処理をエラーとします。
UAPで値を設定する引数
●tblid
レコードを入力するTAMテーブルの,テーブル記述子を設定します。テーブル記述子はdc_tam_open関数で返された値です。
●keyadr
レコードを検索するための,キー値のアドレスを持つ構造体のアドレスを設定します。構造体の形式は次のとおりです。
struct DC_TAMKEY {
char *keyname;
};
●keyno
要求レコード数(keyadrで設定する構造体の数)を設定します。
●bufadr
レコードを入力するバッファのアドレスを設定します。
●bufsize
レコードを入力するバッファの長さを設定します。バッファ長は(レコード長×要求レコード数)以上にします。
●flags
レコードの検索種別,アクセス種別,参照目的の排他のときの排他要否種別を設定します。また,排他を掛ける場合に,資源の競合が起こったときの排他解除待ち種別を設定します。
{フラグ1}|{DCTAM_REFERENCE〔|{DCTAM_EXCLUSIVE|DCTAM_NOEXCLUSIVE}〕|DCTAM_MODIFY}〔|{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には,アクセス権限がありません。 |
All Rights Reserved. Copyright (C) 2006, 2012, Hitachi, Ltd.