Oracle12c oracle如何更改标识列的下一个自动生成值

Oracle12c oracle如何更改标识列的下一个自动生成值,oracle12c,Oracle12c,我创建了如下表项目: CREATE TABLE projects ( project_id NUMBER(10,0) GENERATED BY DEFAULT ON NULL AS IDENTITY , project_name VARCHAR2(75 CHAR) NOT NULL 然后,我在从旧MySQL表导入数据时插入了约150000行。MySQL有我需要保留的现有id号,因此我在插入期间将id号添加到SQL中。现在,当我在oracle表中插入新行时,id是一个非常低的数字。你能告

我创建了如下表项目:

CREATE TABLE projects (
  project_id NUMBER(10,0) GENERATED BY DEFAULT ON NULL AS IDENTITY ,
  project_name VARCHAR2(75 CHAR) NOT NULL
然后,我在从旧MySQL表导入数据时插入了约150000行。MySQL有我需要保留的现有id号,因此我在插入期间将id号添加到SQL中。现在,当我在oracle表中插入新行时,id是一个非常低的数字。你能告诉我如何将我在project_id列上的计数器重置为150001,这样就不会弄乱我现有的id号吗?基本上,我需要oracle版本的:

ALTER TABLE tbl AUTO_INCREMENT = 150001;
编辑:Oracle 12c现在支持标识数据类型,允许自动编号主键,而不需要我们创建序列+插入触发器

解决方案: 在使用了一些创造性的谷歌搜索词后,我在oracle文档网站上找到了这条线索。以下是更改身份的nextval的解决方案:

ALTER TABLE     projects    MODIFY  project_id  GENERATED BY DEFAULT ON NULL AS IDENTITY ( START WITH   150000);

下面的语句在示例模式oe中创建序列customers_seq。将行添加到customers表时,可以使用此序列提供客户ID号

创建顺序客户 从1000开始 增加1 诺卡奇 NOCYCLE

第一次引用customers_seq.nextval返回1000。第二个返回1001。每个后续引用将返回比上一个引用大1的值


这是我在上找到的解决方案。其概念是改变您的标识列,而不是调整序列。实际上,自动创建的序列是不可编辑或不可删除的

ALTER TABLE     projects    MODIFY  project_id  GENERATED BY DEFAULT ON NULL AS IDENTITY ( START WITH   150000);
根据这个,你可以这样做:

ALTER TABLE projects MODIFY project_id
    GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH LIMIT VALUE);
只能使用ALTER TABLE语句指定START WITH LIMIT VALUE子句(并对现有标识列进行暗示)。当指定此条款时,将扫描表中项目ID列中的最高值,序列将从该值+1开始

OP自己的答案中引用的内容中也说明了这一点:

以限制值开始,该值特定于identity_选项,只能与ALTER TABLE MODIFY一起使用。如果指定“从限制值开始”,则Oracle数据库会锁定该表,并在表中查找最大标识列值(对于递增序列)或最小标识列值(对于递减序列),然后将该值指定为序列生成器的高水位线。序列生成器返回的下一个值将是递增序列的高水位线+整数递增,或递减序列的高水位线-整数递增


我没有任何序列。我需要改变我的身份栏。我已经取消了你的问题(并删除了MySQL标签),因为我认为这与现有的问题有很大不同。请随意添加您的解决方案作为答案(而不仅仅是将其编辑到问题中)。