Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成の手引


4.2.4 TAMテーブルへのアクセス手順

〈この項の構成〉

(1) TAMテーブルのオープン

C言語のUAPの場合,dc_tam_open関数でTAMテーブルをオープンします。TAMテーブルをオープンするときは,UAPごとにdc_tam_open関数を呼び出してください。

トランザクションの範囲内でも範囲外でも,TAMテーブルはオープンできます。ただし,トランザクションを開始する前にTAMテーブルをオープンする場合は,そのテーブルに対する排他はできません。TAMテーブルの排他については,「4.2.6 TAMテーブルの排他制御」を参照してください。

TAMテーブルのクローズもテーブル記述子を設定してクローズします。テーブル記述子は,オープン以降の処理でもUAP内で保持しておいてください。

注※

COBOL言語でUAPをコーディングする場合は,UAPからTAMテーブルのオープンとクローズはしません。TAMテーブルにアクセスした時点で,該当のTAMテーブルがオープンされて,トランザクションが完了した時点で,該当のTAMテーブルはクローズされます。

(2) レコードの入力/更新/追加/削除手順

TAMテーブルのレコードを参照または更新目的で入力するときは,dc_tam_read関数【CBLDCTAM('FxxR')('FxxU')('VxxR')('VxxU')】を呼び出します。そのとき,別のグローバルトランザクションからの参照または更新を許すかどうかを設定できます。

TAMテーブルのレコードを更新するときは,dc_tam_read関数でレコードを入力したあとに,dc_tam_rewrite関数【CBLDCTAM('MFY ')('MFYS')('STR ')('WFY ')('WFYS')('YTR ')】を呼び出します(入力前提の更新)。

TAMテーブルからレコードを入力しないで,すでにあるレコードに上書きする更新,またはレコードを新規追加する場合は,dc_tam_write関数【CBLDCTAM('MFY ')('MFYS')('STR ')('WFY ')('WFYS')('YTR ')】を呼び出します。

TAMテーブルのレコードを削除する場合は,dc_tam_delete関数【CBLDCTAM('ERS ')('ERSR')('BRS ')('BRSR')】を呼び出します。削除するレコードは,任意のアドレスのバッファに退避できます。退避先のアドレスは,dc_tam_delete関数に設定します。

dc_tam_read関数,またはdc_tam_delete関数のバッファ域,およびdc_tam_rewrite関数,またはdc_tam_write関数のデータ域の先頭を,4バイト境界で設定した場合,設定しない場合に比べて,より高速なアクセスができます。

(3) 複数レコードの一括入出力

複数のキー値(レコード)を,一括して入出力できます。TAMテーブルを入出力するときに,アクセスするキー値を構造体として関数に設定します。この構造体は複数個指定できます。

(4) インデクス種別によるレコードの入力

TAMテーブルからレコードを入力するときは,インデクス種別によって設定できる検索種別が異なります。

(5) TAMテーブルのクローズ

TAMテーブルは,dc_tam_close関数でクローズします。

トランザクションの範囲内でTAMテーブルをオープンしたときは,トランザクション内でクローズしてください。クローズをしないでトランザクションを終了させたときは,OpenTP1でTAMテーブルをクローズします。

トランザクションの範囲外でTAMテーブルをオープンしたときは,トランザクションの外でクローズしてください。トランザクション内でdc_tam_close関数を呼び出すとエラーリターンします。

TAMテーブルのアクセス手順を次の図に示します。

図4‒7 TAMテーブルのアクセス手順

[図データ]

(6) TAMテーブルの状態を取得

オンライン中にTAMテーブルの状態を知りたい場合は,dc_tam_get_inf関数【CBLDCTAM('GST ')】を使います。dc_tam_get_inf関数は,トランザクション処理からでもトランザクションでない処理からでも呼び出せます。dc_tam_get_inf関数では,TAMテーブルが次に示すどの状態かを返します。

dc_tam_get_inf関数を呼び出したUAPがTAMテーブルをオープンしていなくても,ほかのUAPがTAMテーブルをオープンしていれば,dc_tam_get_inf関数はオープン状態を返します。

(7) TAMテーブルの情報を取得

オンライン中にTAMテーブルの情報を知りたい場合は,dc_tam_status関数【CBLDCTAM('INFO')】を使います。dc_tam_status関数は,トランザクション処理からでもトランザクションでない処理からでも呼び出せます。dc_tam_status関数は,次に示すTAMテーブルの情報を返します。