我正在使用IDENTITYoracle 12 c的功能来增加表的记录ID.
作为初始设置的一部分,我们必须将一些记录从另一个系统迁移到此表.这些记录是非顺序记录(部分记录被删除).
如何使身份始终value + 1根据表记录创建最高.
在谷歌搜索不同的选项后找到关键字的RESTART WITH值选项.为此,我们需要创建一个新的存储过程并更改具有最高可能值的所有表以重新启动.
是否有任何可以与之一起使用的直接关键字IDENTITY可以强制它始终重新生成更高的值.?
Sco*_*ott 10
这在 12c 中变得非常容易
alter table your_table modify (id generated by default on null as identity
start with limit value);
Run Code Online (Sandbox Code Playgroud)
然后下一次插入将使用已自动重置为本质上是 max(id)+1 https://docs.oracle.com/database/121/SQLRF/statements_3001.htm#SQLRF01001的序列安全插入
没有直接关键字,您必须更改表(正确的单词是 START WITH)。
还有另一种方法可以更改标识列的高水位线。至于常见序列(顺便说一下,身份是建立在系统序列上的),使用 INCRMENT BY 的老技巧在任何方向上移动标记。
ALTER TABLE T
MODIFY (ID NUMBER GENERATED ALWAYS AS IDENTITY
INCREMENT BY 50
NOCACHE);
Run Code Online (Sandbox Code Playgroud)
也就是说,如果现在下一个值为 100,而您需要将其设为 1000,则执行此技巧两次:“增量 900”,添加记录并返回“增量 1”(如果与步骤 1 一致)。