4.2.5 トランザクションとTAMアクセスの関係
トランザクションブランチで,TAMアクセスのエラーが起こった場合は,UAPからabort()を呼び出して,そのグローバルトランザクションのプロセスを異常終了させてください。
同じグローバルトランザクション内でも,以前にアクセスした関数によっては,一つのレコードに対するアクセスがエラーリターンする場合があります。また,同じレコードへのアクセスでも,同じグローバルトランザクションに属するときと,異なるグローバルトランザクションからの場合では,結果が異なります。
同じレコードに対して関数を複数回呼び出したときの処理結果を表4-7と表4-8に示します。
前回呼び出した関数 |
今回呼び出した関数 |
結果またはエラーリターンする値 |
---|---|---|
トランザクション内で,まだTAMテーブルにアクセスする関数を呼び出していない |
dc_tam_read(参照目的の入力) |
○ |
dc_tam_read(参照目的の入力 排他を指定) |
○ |
|
dc_tam_read(更新目的の入力) |
○ |
|
dc_tam_read_cancel(入力の取り消し) |
DCTAMER_SEQENCE(01732) |
|
dc_tam_rewrite(入力前提の更新) |
DCTAMER_SEQENCE(01732) |
|
dc_tam_write(更新) |
○ |
|
dc_tam_write(追加) |
○ |
|
dc_tam_delete(削除) |
○ |
|
dc_tam_read (参照目的の入力) |
dc_tam_read(参照目的の入力) |
○ |
dc_tam_read(参照目的の入力 排他を指定) |
○ |
|
dc_tam_read(更新目的の入力) |
○ |
|
dc_tam_read_cancel(入力の取り消し) |
DCTAMER_SEQENCE(01732) |
|
dc_tam_rewrite(入力前提の更新) |
DCTAMER_SEQENCE(01732) |
|
dc_tam_write(更新) |
○ |
|
dc_tam_write(追加) |
DCTAMER_EXKEY(01735) |
|
dc_tam_delete(削除) |
○ |
|
dc_tam_read (参照目的の入力 排他を指定) |
dc_tam_read(参照目的の入力) |
○ |
dc_tam_read(参照目的の入力 排他を指定) |
○ |
|
dc_tam_read(更新目的の入力) |
○ |
|
dc_tam_read_cancel(入力の取り消し) |
○※1 |
|
dc_tam_rewrite(入力前提の更新) |
DCTAMER_SEQENCE(01732) |
|
dc_tam_write(更新) |
○ |
|
dc_tam_write(追加) |
DCTAMER_EXKEY(01735) |
|
dc_tam_delete(削除) |
○ |
|
dc_tam_read (更新目的の入力) |
dc_tam_read(参照目的の入力) |
○ |
dc_tam_read(参照目的の入力 排他を指定) |
○ |
|
dc_tam_read(更新目的の入力) |
○ |
|
dc_tam_read_cancel(入力の取り消し) |
○ |
|
dc_tam_rewrite(入力前提の更新) |
○ |
|
dc_tam_write(更新) |
○ |
|
dc_tam_write(追加) |
DCTAMER_EXKEY(01735) |
|
dc_tam_delete(削除) |
○ |
|
dc_tam_read_cancel (入力の取り消し) |
dc_tam_read(参照目的の入力) |
○ |
dc_tam_read(参照目的の入力 排他を指定) |
○ |
|
dc_tam_read(更新目的の入力) |
○ |
|
dc_tam_read_cancel(入力の取り消し) |
DCTAMER_SEQENCE(01732)※2 |
|
dc_tam_rewrite(入力前提の更新) |
DCTAMER_SEQENCE(01732) |
|
dc_tam_write(更新) |
○ |
|
dc_tam_write(追加) |
DCTAMER_EXKEY(01735) |
|
dc_tam_delete(削除) |
○ |
|
dc_tam_rewrite (入力前提の更新) |
dc_tam_read(参照目的の入力) |
○ |
dc_tam_read(参照目的の入力 排他を指定) |
○ |
|
dc_tam_read(更新目的の入力) |
○ |
|
dc_tam_read_cancel(入力の取り消し) |
DCTAMER_EXREWRT(01734) |
|
dc_tam_rewrite(入力前提の更新) |
○ |
|
dc_tam_write(更新) |
○ |
|
dc_tam_write(追加) |
DCTAMER_EXKEY(01735) |
|
dc_tam_delete(削除) |
○ |
|
dc_tam_write (更新,または追加) |
dc_tam_read(参照目的の入力) |
○ |
dc_tam_read(参照目的の入力 排他を指定) |
○ |
|
dc_tam_read(更新目的の入力) |
○ |
|
dc_tam_read_cancel(入力の取り消し) |
DCTAMER_SEQENCE(01732) |
|
dc_tam_rewrite(入力前提の更新) |
DCTAMER_SEQENCE(01732) |
|
dc_tam_write(更新) |
○ |
|
dc_tam_write(追加) |
DCTAMER_EXKEY(01735) |
|
dc_tam_delete(削除) |
○ |
|
dc_tam_delete (削除) |
dc_tam_read(参照目的の入力) |
DCTAMER_NOREC(01731) |
dc_tam_read(参照目的の入力 排他を指定) |
DCTAMER_NOREC(01731) |
|
dc_tam_read(更新目的の入力) |
DCTAMER_NOREC(01731) |
|
dc_tam_read_cancel(入力の取り消し) |
DCTAMER_NOREC(01731) |
|
dc_tam_rewrite(入力前提の更新) |
DCTAMER_NOREC(01731)※3 |
|
dc_tam_write(更新) |
DCTAMER_NOREC(01731) |
|
dc_tam_write(追加) |
○ |
|
dc_tam_delete(削除) |
DCTAMER_NOREC(01731) |
- (凡例)
-
○:エラーになりません。
DCTAMER_NOREC(01731):指定されたレコードはありません。
DCTAMER_SEQENCE(01732):dc_tam_read関数を呼び出していません。
DCTAMER_EXKEY(01735):関数に設定したキー値のレコードがあるので,追加できません。
- 注※1
-
dc_tam_read関数(参照目的の入力,排他を指定)の前に,dc_tam_rewrite関数,dc_tam_write関数を呼び出して,レコードを更新または追加されている場合は,DCTAMER_EXREWRT,またはDCTAMER_EXWRITEがリターンされます。
- 注※2
-
dc_tam_read_cancel関数(入力の取り消し)の前にdc_tam_rewrite関数,dc_tam_write関数を呼び出して,レコードを更新または追加されている場合は,DCTAMER_EXWRITEがリターンされます。
- 注※3
-
dc_tam_delete関数(削除)の前にdc_tam_write関数を呼び出して,レコードが追加されている場合は,DCTAMER_SEQENCEがリターンされます。
前回呼び出した関数 |
今回呼び出した関数 |
結果またはエラーリターンする値 |
---|---|---|
トランザクション内で,まだTAMテーブルにアクセスする関数を呼び出していない |
dc_tam_read(参照目的の入力) |
○ |
dc_tam_read(参照目的の入力 排他を指定) |
○ |
|
dc_tam_read(更新目的の入力) |
○ |
|
dc_tam_read_cancel(入力の取り消し) |
−※1 |
|
dc_tam_rewrite(入力前提の更新) |
−※1 |
|
dc_tam_write(更新) |
○ |
|
dc_tam_write(追加) |
○ |
|
dc_tam_delete(削除) |
○ |
|
dc_tam_read (参照目的の入力) |
dc_tam_read(参照目的の入力) |
○ |
dc_tam_read(参照目的の入力 排他を指定) |
○※2 |
|
dc_tam_read(更新目的の入力) |
○※2 |
|
dc_tam_read_cancel(入力の取り消し) |
−※1 |
|
dc_tam_rewrite(入力前提の更新) |
−※1 |
|
dc_tam_write(更新) |
○※2 |
|
dc_tam_write(追加) |
DCTAMER_EXKEY(01735) |
|
dc_tam_delete(削除) |
○※2 |
|
dc_tam_read (参照目的の入力 排他を指定) |
dc_tam_read(参照目的の入力) |
○ |
dc_tam_read(参照目的の入力 排他を指定) |
○※2 |
|
dc_tam_read(更新目的の入力) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_read_cancel(入力の取り消し) |
−※1 |
|
dc_tam_rewrite(入力前提の更新) |
−※1 |
|
dc_tam_write(更新) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_write(追加) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_delete(削除) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_read (更新目的の入力) |
dc_tam_read(参照目的の入力) |
○ |
dc_tam_read(参照目的の入力 排他を指定) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_read(更新目的の入力) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_read_cancel (入力の取り消し) |
−※1 |
|
dc_tam_rewrite(入力前提の更新) |
−※1 |
|
dc_tam_write(更新) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_write(追加) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_delete(削除) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_read_cancel (入力の取り消し) |
dc_tam_read(参照目的の入力) |
○ |
dc_tam_read(参照目的の入力 排他を指定) |
○※4,※5 |
|
dc_tam_read(更新目的の入力) |
○※4,※5 |
|
dc_tam_read_cancel (入力の取り消し) |
−※1 |
|
dc_tam_rewrite(入力前提の更新) |
−※1 |
|
dc_tam_write(更新) |
○※4,※5 |
|
dc_tam_write(追加) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_delete(削除) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_rewrite (入力前提の更新) |
dc_tam_read(参照目的の入力) |
○ |
dc_tam_read(参照目的の入力 排他を指定) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_read(更新目的の入力) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_read_cancel (入力の取り消し) |
−※1 |
|
dc_tam_rewrite(入力前提の更新) |
−※1 |
|
dc_tam_write(更新) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_write(追加) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_delete(削除) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_write (更新,または追加) |
dc_tam_read(参照目的の入力) |
○ |
dc_tam_read(参照目的の入力 排他を指定) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_read(更新目的の入力) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_read_cancel (入力の取り消し) |
−※1 |
|
dc_tam_rewrite(入力前提の更新) |
−※1 |
|
dc_tam_write(更新) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_write(追加) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_delete(削除) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_delete (削除) |
dc_tam_read(参照目的の入力) |
○ |
dc_tam_read(参照目的の入力 排他を指定) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_read(更新目的の入力) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_read_cancel(入力の取り消し) |
−※1 |
|
dc_tam_rewrite(入力前提の更新) |
−※1 |
|
dc_tam_write(更新) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_write(追加) |
DCTAMER_LOCK(01736)※3 |
|
dc_tam_delete(削除) |
DCTAMER_LOCK(01736)※3 |
- (凡例)
-
○:エラーになりません。
−:該当しません。
DCTAMER_EXKEY(01735):関数に設定したキー値のレコードがあるので,追加できません。
DCTAMER_LOCK(01736):排他エラーが起こりました。
- 注※1
-
異なるトランザクションでは,別の処理になります。
- 注※2
-
別グローバルトランザクションで,同じTAMテーブルに対してレコードの追加/削除している場合は,DCTAMER_LOCK(01736)がリターンされます。ただし,排他待ち種別にDCTAM_WAITを設定した場合は,排他解除待ちとなります。
- 注※3
-
排他待ち種別にDCTAM_WAITを設定した場合は,排他待ちとなります。
- 注※4
-
別グローバルトランザクションでレコードの追加/削除している場合は,DCTAMER_LOCK(01736)がリターンされます。ただし,排他待ち種別にDCTAM_WAITを設定した場合は,排他解除待ちとなります。
- 注※5
-
dc_tam_read_cancel関数の前に,別グローバルトランザクションで,dc_tam_rewrite関数,dc_tam_write関数を呼び出して,レコードの更新または追加している場合は,DCTAMER_LOCK(01736)がリターンされます。ただし,排他待ち種別にDCTAM_WAITを設定した場合は,排他解除待ちとなります。