【问题标题】:Oracle start Sequence from 1Oracle 从 1 开始序列
【发布时间】:2013-03-04 13:09:59
【问题描述】:

我正在使用 Oracle 10g 维护一个数据库,我希望有一个从 1 开始并随着每增加一行而递增 1 的序列。

为了实现这一点,我创建了以下语句:

CREATE SEQUENCE PATIENTS_SEQ START WITH 1 INCREMENT BY 1 NOMINVALUE NOCACHE NOCYCLE;

但是,在将第一个条目插入到具有值 (PATIENTS_SEQ.NEXTVAL) 的表中时,计数从 2 而不是 1 开始。如果我将序列修改为以 0 开头,则会收到一个错误,即以 value 开头不能小于最小值。谁能帮助解决如何让我的计数从 1 开始正确开始?

【问题讨论】:

  • 我无法复制。当我创建这个序列时,我得到一个初始值1
  • 很奇怪,不管我做什么都是从2的初始值开始的。我接受了马的建议。感谢您尝试重现错误。
  • 也许您的表上有一个“插入前”触发器,它从序列中获取下一个值并将其用作 PK 的值?换句话说,您可能会意外地获得两次 nextval。
  • 如果这有什么不同的话,我会使用 11g。
  • 我绝对没有任何用户定义的“插入前”触发器。我用一个简单的表尝试过这个,CREATE TABLE PATIENTS(ID INT CONSTRAINT PATIENTS_KEY PRIMARY KEY);

标签: sql database oracle oracle10g


【解决方案1】:

只需将最小值也设置为 0:

CREATE SEQUENCE PATIENTS_SEQ 
  START WITH 0 
  INCREMENT BY 1 
  MINVALUE 0 
  NOCACHE 
  NOCYCLE;

【讨论】:

  • 为什么是 MINVALUE 0?
  • @a_horse_with_no_name:我想知道它起作用的原因。
猜你喜欢
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 2016-06-01
  • 2022-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多