1

レコードを挿入した後に自動的に増加する列をOracleデータベースに追加したいと思います。また、レコードを削除すると自動的に減少する必要があります。このフィールドは、テーブル見出しのシーケンス番号を格納するために使用され、その見出しは再-orderしたがって、番号シーケンス間にギャップがあってはなりません.TRIGGERとSEQUENCEで試しましたが、うまくいきませんでした.PL/SQLを使用する方法はありますか.実際に私が望むのは、シーケンス番号をシフトすることです.レコードを削除するとき。

例: 行 1、行 2、行 3、行 4、行 5 行 3 を削除すると、シーケンスは行 1、行 2、行 3、行 4 となり、行 4 にあったレコードは行 3 に移動する必要があります。の上..

私はjspサーブレット技術を使用しています。Javaを使用してこれを行う方法があれば、それも良いです。

ありがとうございました!

4

1 に答える 1

3

いいえ; 簡単な方法はありません。

シーケンスで何をしても、ギャップのない数字のシーケンス、完全な1, 2 .. nが生成されることはありません。たとえそれらがあったとしても、テーブル全体、またはテーブル内の一連の行のシーケンスを最初から再生成せずに自動的に再生成する方法はありません。簡単に言えば、行 3 を削除すると、3 より大きいシーケンス番号を持つすべてのレコードを更新する必要があります。これは明らかにばかげています。

なぜこれをやりたいのかわかりませんが、私の「答え」を行うと仮定すると、この情報をテーブルにまったく保存しないことになります。この列を必要とするクエリについては、分析関数を使用してオンザフライで生成しますrow_number()。例えば:

select column1, column2, row_number() over ( order by <whatever> ) as my_sequence
  from my_table

ORDER BYこれにより、句で指定された順序で各行に一意の番号が割り当てられます。

これをビューに配置することもできるため、クエリに配置することを覚えておく必要さえなく、毎回まったく同じ方法で生成されていることが確実になります。

于 2012-09-13T07:23:44.187 に答える