1

我想在oracle数据库中添加一列,插入记录后自动递增。删除记录时应该自动递减。该字段用于存储表标题的序列号,并且标题应该能够重新-order 因此数字序列之间不应该有任何差距。我尝试过使用 TRIGGER 和 SEQUENCE 但它没有用。有没有办法使用 PL/SQL 来实现这一点。实际上我想要的是改变序列号删除记录时。

例如:第 1 行,第 2 行,第 3 行,第 4 行,第 5 行 如果我们删除第 3 行,则顺序应该是第 1 行,第 2 行,第 3 行,第 4 行,并且第 4 行的记录应该到第 3 行,所以上..

我正在使用 jsp-servlet 技术。如果有任何方法可以通过使用 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 回答