0

私は列の値をインクリメントし、スレッドセーフな方法で呼び出し元に返そうとしています。フォーラムでこれに対する多くの提案された解決策を見てきましたが、2つの異なるクライアントを保証するものを見たことがありません。データベースは同じ結果を取得しません。作成するテーブルは次のようになります。

Column Name    Data Type
-----------    --------------
Description    varchar(50)
CurrentValue   int

表のデータは次のようになります。

Description           CurrentValue
----------------      ---------------------
Billing               123422
Policy                28383

それで、その情報が利用可能である場合、スレッドセーフな方法で(競合状態なしで)CurrentValue列の値をインクリメントし、それをインクリメントさせたユーザーに返すにはどうすればよいですか?

私が実行するプラットフォームはDB2であり、クライアントはJavaアプリケーションになると確信しています。

4

1 に答える 1

2

データベースシーケンス(Oracle DBMSの例)は、少なくともPostgreSQL、MS SQL、およびOracleでこれを処理する必要があります。したがって、増分番号のあるID列は、バインドされているシーケンスからその値を読み取る列(または原則として同様の列)である必要があります。

SELECTシーケンスでa (つまり読み取り)が発生するたびに、後でその値を使用する場合は、その値が増分されます。

于 2012-05-10T14:16:29.630 に答える