【问题标题】:oracle how to change the next autogenerated value of the identity columnoracle如何更改标识列的下一个自动生成的值
【发布时间】:2015-12-11 00:03:56
【问题描述】:

我已经创建了这样的表格项目:

CREATE TABLE projects (
  project_id NUMBER(10,0) GENERATED BY DEFAULT ON NULL AS IDENTITY ,
  project_name VARCHAR2(75 CHAR) NOT NULL

然后我在从旧的 MySQL 表中导入数据时插入了大约 150,000 行。 MySQL 有我需要保留的现有 ID 号,因此我在插入期间将 ID 号添加到 SQL 中。现在,当我在 oracle 表中插入新行时,id 是一个非常低的数字。您能告诉我如何将 project_id 列上的计数器重置为从 150,001 开始,以免弄乱我现有的任何 ID 号码吗?基本上我需要oracle版本:

ALTER TABLE tbl AUTO_INCREMENT = 150001;

编辑:Oracle 12c 现在支持身份数据类型,允许自动编号主键,不需要我们创建序列 + 插入触发器。

解决方案: 在一些有创意的谷歌搜索词之后,我能够在 oracle 文档网站上找到this 线程。这里是更改身份的 nextval 的解决方案:

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

【问题讨论】:

  • 我没有任何序列。我需要更改我的身份列。
  • 我没有重复您的问题(并删除了 MySQL 标签),因为我认为它与现有问题有明显的不同。随意添加您的解决方案作为答案(而不仅仅是将其编辑到问题中)。

标签: oracle12c


【解决方案1】:

这是我在this oracle thread: 上找到的解决方案。这个概念是改变你的身份列而不是调整顺序。实际上,自动创建的序列是不可编辑或可拖放的。

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

【讨论】:

    【解决方案2】:

    根据这个source,你可以这样做:

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

    START WITH LIMIT VALUE 子句只能使用 ALTER TABLE 语句指定(并且通过对现有标识列的暗示)。指定此子句时,将在表中扫描 PROJECT_ID 列中的最大值,序列将从该值 + 1 开始。

    在 OP 自己的答案中引用的oracle thread 中也有同样的说明:

    START WITH LIMIT VALUE 特定于 identity_options,只能与 ALTER TABLE MODIFY 一起使用。如果指定 START WITH LIMIT VALUE,则 Oracle 数据库锁定表并在表中找到最大标识列值(对于递增序列)或最小标识列值(对于递减序列)并将该值分配为序列生成器的高水位标记。序列生成器返回的下一个值将是高水位线 + INCREMENT BY 整数用于递增序列,或高水位线 - INCREMENT BY 整数用于递减序列。

    【讨论】:

      【解决方案3】:

      以下语句在示例模式 oe 中创建序列 customers_seq。此序列可用于在向客户表中添加行时提供客户 ID 号。

      创建序列 customers_seq 从 1000 开始 增加 1 诺卡奇 NOCYCLE;

      第一个对 customers_seq.nextval 的引用返回 1000。第二个返回 1001。每个后续引用将返回一个大于前一个引用的值 1。

      http://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_6014.htm

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-21
        • 1970-01-01
        • 1970-01-01
        • 2013-10-16
        相关资源
        最近更新 更多