Oracle从1开始启动序列。

5
我正在使用Oracle 10g维护一个数据库,并希望拥有一个序列,从1开始,在每增加一行时递增1。
为了实现这个目标,我创建了以下语句:
CREATE SEQUENCE PATIENTS_SEQ START WITH 1 INCREMENT BY 1 NOMINVALUE NOCACHE NOCYCLE;

然而,当我插入第一条带有值(PATIENTS_SEQ.NEXTVAL)的记录时,计数器从2开始而不是1。如果我修改序列以从0开始,则会出现错误,指出起始值不能小于minvalue。有谁能帮助解决如何使我的计数从1开始的问题?


1
我无法重现。当我创建这个序列时,我得到一个初始值为1的值。 - Mike Christensen
非常奇怪,无论我做什么,它都以初始值“2”开始。我采用了horse的建议。感谢您尝试重现错误。 - raphnguyen
也许您在表上有一个“插入前”触发器,该触发器从序列中获取下一个值并将其用作PK的值?换句话说,您可能会意外地获取两次nextval。 - Chris Farmer
我使用的是11g,如果有任何区别请告诉我。 - Mike Christensen
基本上我只是运行了 CREATE SEQUENCE PATIENTS_SEQ START WITH 1 INCREMENT BY 1 NOMINVALUE NOCACHE NOCYCLE; 然后我运行了 select PATIENTS_SEQ.NEXTVAL from dual;,然后我得到了 1 - Mike Christensen
显示剩余5条评论
1个回答

17

只需将minvalue设置为0:

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

为什么最小值是0? - Roni Castro
@a_horse_with_no_name:我想知道它能够工作的原因。 - Roni Castro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接