各行のテーブルトランザクションでnumber_orderを生成する必要があります(順序は1,2,3 ...)。私の解決策は、テーブルトランザクションの挿入前にトリガーを作成することです。トリガーの使命は、テーブルの総行数をカウントすることです(トランザクションからカウント数を選択(1)からv_countまで選択) - >次にnew.num_order = v_count + 1を設定します。トリガーでマルチスレッドを処理する
このソリューションはほとんどの場合OKですが、多くのスレッドがテーブルに挿入され、マルチスレッドでトリガが実行され、SAME ORDERが返されます(理由はselectコマンドが同じ時刻で呼ばれ、挿入前には&と呼ばれます)。 これに代わる解決策を教えてください。前もって感謝します。 P/s:私はOracle 12cデータベースを使用しています。そして、順序は実際にはテーブルの他のいくつかの列(例えば:Room_id)に基づいているので、私はシーケンスを使用することはできません。したがって、完全なselectコマンドは次のとおりです。select count(1)to v_count from room_id =:new.room_id)
ありがとうございます。しかし、このソリューションは私にとっては複雑なようです。 – Khoa
@Khoa、あなたの要件の背後にある隠れたトラップが複雑なので、ソリューションは複雑です。 –