如何在 Oracle 中重置身份列

Tig*_*yan 7 oracle

我有一个带有标识的列,计数为 19546542,我想在删除所有数据后重置它。我需要像 ms sql 中的“dbcc checkident”之类的东西,但在 Oracle 中

mij*_*ved 10

从 Oracle 12c 及以上版本开始,您可以通过 3 种方式进行操作:

  1. 手动将序列的下一个值重置为特定值:

ALTER TABLE [TableName] MODIFY(ID GENERATED AS IDENTITY (START WITH 1));

  1. 自动将序列的下一个值重置为最大 ID 值:

ALTER TABLE [TableName] MODIFY ID GENERATED BY DEFAULT AS IDENTITY (START WITH LIMIT VALUE);

以上两种情况都允许您在标识列中插入带有值的数据

insert into [TableName] (ID, Name) VALUES (1, 'Name1');
insert into [TableName] (ID, Name) VALUES (2, 'Name2');
Run Code Online (Sandbox Code Playgroud)
  1. 自动将序列的下一个值重置为最大 ID:

ALTER TABLE [TableName] MODIFY GENERATED ALWAYS AS IDENTITY (START WITH LIMIT VALUE);

但是,在这种情况下,它会限制您插入标识列值

insert into [TableName] (Name) VALUES ('Name1');
insert into [TableName] (Name) VALUES ('Name2');
Run Code Online (Sandbox Code Playgroud)

如果将值传递给标识列,则会出现以下错误

ORA-32795: 无法插入生成的始终标识列