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

如何将oracle中的标识列重置为新值,oracle,identity,Oracle,Identity,我正在使用Oracle12c的IDENTITY功能来增加表的记录id作为初始设置的一部分,我们必须将一些记录从另一个系统迁移到此表。这些记录是非连续记录(部分记录被删除) 如何使标识始终基于表记录创建最高的值+1 在谷歌搜索不同的选项后,找到了用值选项重新启动的关键字。为此,我们需要创建一个新的存储过程,并更改所有具有最高可能值的表以重新启动 是否有任何可以与标识一起使用的直接关键字可以强制它始终重新生成更高的值 没有直接关键字,您必须更改表格(正确的单词以开头)。 还有另一种方法可以更改标识列

我正在使用Oracle12c的
IDENTITY
功能来增加表的记录id
作为初始设置的一部分,我们必须将一些记录从另一个系统迁移到此表。这些记录是非连续记录(部分记录被删除)

如何使标识始终基于表记录创建最高的
值+1

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


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

没有直接关键字,您必须更改表格(正确的单词以开头)。
还有另一种方法可以更改标识列的highwatermark。 对于常见的序列(通过在系统序列上建立标识的方式),使用一个旧的技巧,在任何方向上移动标记

ALTER表T
修改(ID号始终作为标识生成
增加50
NOCACHE);

也就是说,如果现在下一个值是100,你需要将它设为1000,你可以做两次这个技巧:“增加900”,添加记录,然后返回“增加1”(如果与步骤1一致)。

这在12c中变得非常简单

alter table your_table modify (id generated by default on null as identity 
                               start with limit value);
然后,下一次插入将使用一个序列进行安全插入,该序列已自动重置为本质上的max(id)+1

重新启动功能不起作用,即使在oracle文档中建议将其作为选项。唯一的选项似乎是改变表并强制标识从最高值+1开始。“restart with”不是oracle,可能是mysql?我总是得到ORA-30673:当试图将列设置为标识列时,要修改的列不是标识列。似乎您只能调整现有标识列的设置,而不能将现有非标识列转换为一个。正确。此语句用于重置序列值,而不是迁移列的行为。看看这个例子谢谢,斯科特!你让我开心!