0

シーケンスから生成された VARCHAR 一意キーと NUMBER 一意キーの 2 つの列を含むテーブル (ORADB 内) があります。

新しい VARCHAR キーを取得するたびにこの列にレコードを常に (そして並行して) 追加し、新しく生成された NUMBER キーを返す Java コードが必要です。または、既存の VARCHAR を取得したときに既存の NUMBER キーを返します (その場合は挿入しません。もちろん、一意キー違反のために例外がスローされます)。

このような手順は、並行して動作する多くの (Java) クライアントから実行されます。

私の英語が理解できることを願っています:)

それを行うための最良の方法は何ですか(Javaコードの代わりにPL / SQLブロックを使用するかもしれません...)?

4

1 に答える 1

2

私はあなたがより良くできるとは思わない

  1. SELECT the_number FROM the_table where the_key = :key

  2. 見つかったら返却

  3. 見つからない場合、INSERT INTO the_table SELECT :key, the_seq.NEXT_VAL RETURNING the_number INTO :numberおよびCOMMIT

  4. タイミングが悪いと、ORA-00001 (主キーの重複挿入) が発生する可能性があります。この場合、SELECTもう一度。

JDBC が RETURNING をサポートしているかどうかわからないので、ストアド プロシージャにラップする必要があるかもしれません (データベースのラウンドトリップも節約できます)。

インデックス構成テーブル (主キーとして the_key を使用) を使用すると、ルックアップが高速になります。

于 2009-12-09T08:59:31.513 に答える