注意: すべての回答に感謝しますが、既にシーケンスがあります..一部のアイテムには重複が必要なため、UNIQUE制約を使用できません..PLSQLを使用してこれを処理する必要があるため、いくつかの基準に基づいて( if ステートメント) そのための重複がないことを確認する必要があります..確認するために、これらの識別子はさまざまな種類の文字列で非常にカスタマイズされています..そして、文字列の各セットについて、その文字列に対してのみカウントアップする数があります(STR-STR-####) そして、これらの STR-STR の組み合わせが何百もあり、各組み合わせに対してカウントアップする #### があります...そして、これらの STR-STR の組み合わせに加えて、いくつかの STR-STR の組み合わせが許可されます重複する..したがって、UNIQUE CONTRAINTS を使用することはできません。PRIMARY KEY は単純な数値ではないため使用できません。その上、各アイテムに PRIMARY KEY が割り当てられています。これらの識別子はユーザー用であり、データベース管理用ではありません。
ユーザーがアイテムを作成すると、いくつかの基準に基づいて、アイテムに特定の番号が付けられます。保存関数では、最初の初期文字列を準備する関数が呼び出され、次に番号が保持されているテーブルがスキャンされ、その特定の文字列に次に使用可能な 4 桁の番号が割り当てられます。
これにはいくつかの問題があります。次の番号を取得してからデータベースにコミットするまでに約 1000 行のコードがあります。問題は、2 人が数秒以内に同じ条件でアイテムを作成すると、同じ番号が発行される場合があることです。
私がやったことは、コミットの直前に、データベースで番号をチェックし、存在する場合は、関数を呼び出して、次に利用可能な番号を再度取得することです...
このコードは重複の可能性を減らしましたが、2つのアイテムを同時に保存すると、重複した番号が表示されます..
重複を回避し、重複番号の可能性を 0 にする方法を知っている人はいますか?
EDIT1: すでに主キーがあります..この識別子は特別な文字列であり、非常にカスタマイズされているため、0 からカウントアップする数値を使用することはできません。
EDIT2:重複が必要な場合もあります..これは非常にマイナーです(おそらく約10個の異なるアイテムトラックが重複を使用しています)。そのため、ifステートメントでコミットする前に重複のチェックを行う前に、 t が重複しているはずのシステムの 1 つに属している場合、チェックをスキップします...
編集 3: ここでは PL/SQL を使用しています
EDIT 4:この問題は非常に具体的で、あまり伝えていなかったと思います.多くの回答がありましたが、誰も実際に私の問題を捉えていませんでした..とにかく、私は問題を解決し、私の答えとして以下に追加しました..