在oracle 10g中添加自动增量和自动减量列

时间:2012-09-12 08:46:52

标签: java plsql oracle10g

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

例如:第1行,第2行,第3行,第4行,第5行,如果我们删除第3行,则序列应该是第1行,第2行,第3行,第4行和第4行的记录应该是行3等等..

我正在使用jsp-servlet技术。如果有任何方法可以通过使用java来做到这一点。

谢谢!

1 个答案:

答案 0 :(得分:3)

没有;没有简单的方法。

无论你对序列做什么,他们都会never generate a gap free sequence of numbers,一个完美的 1,2 .. n 。即使他们这样做,也无法自动为整个表或表中的行集重新生成序列,而无需从头开始重新生成它。简单地说,如果删除第3行,则需要更新序列号大于3的所有记录。这显然是荒谬的。

我没有看到为什么你想要这样做,但是,假设你做“我的回答”就是不要将这些信息存储在你的表中。对于那些需要此列的查询,使用分析函数row_number()即时生成它。例如:

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

这将按照ORDER BY子句中给出的顺序为每一行分配一个唯一编号。

你也可以将它放在一个视图中,这样你甚至不需要记住将它放在查询中,并且你确定它每次都以完全相同的方式生成。