如何将oracle中的IDENTITY列重置为新值

时间:2015-08-03 09:28:02

标签: oracle identity

我正在使用oracle 12 c的IDENTITY功能来增加表的记录ID。
作为初始设置的一部分,我们必须将一些记录从另一个系统迁移到该表。这些记录是非顺序记录(部分记录被删除)。

如何使身份始终根据表记录创建最高value + 1

在Google搜索不同选项后,找到了RESTART WITH值选项的关键字。为此,我们需要创建一个新的存储过程并更改具有最高可能值的所有表以重新启动。

是否有任何直接关键字可以与IDENTITY一起使用,这可以强制它始终重新生成更高的值。 ?

2 个答案:

答案 0 :(得分:3)

这在12c中变得非常简单

alter table your_table modify (id generated by default on null as identity 
                               start with limit value);

然后下一个插入将使用已自动重置为基本上max(id)+1的序列​​安全地插入 https://docs.oracle.com/database/121/SQLRF/statements_3001.htm#SQLRF01001

答案 1 :(得分:1)

没有直接关键字,你必须改变表格(右边的单词是START WITH) 还有另一种方法可以更改身份列的高水位标记。 至于常见的序列(通过身份建立在系统序列上的方式),使用INCREMENT BY的旧技巧在任何方向上移动标记。

ALTER TABLE T
MODIFY (ID NUMBER GENERATED ALWAYS AS IDENTITY
INCREMENT BY 50
NOCACHE);

也就是说,如果现在下一个值是100并且你需要将它设为1000,那么你要做两次这样的技巧:“增加900”,添加记录并返回“增加1”(如果与步骤1相同)