以 2 而不是 1 开头的 Oracle 序列

Oracle Sequence starting with 2 instead of 1(以 2 而不是 1 开头的 Oracle 序列)
本文介绍了以 2 而不是 1 开头的 Oracle 序列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

意外行为:

我在使用 11g(适用于 10g)时遇到 Oracle 序列的奇怪行为:

I am encountering strange behavior of Oracle sequences with 11g (works with 10g):

CREATE SEQUENCE test_sequence START WITH 1;
CREATE TABLE test_table ( val INT );

INSERT INTO test_table VALUES ( test_sequence.NEXTVAL );

即使序列以1开头,插入的第一个值是2:

Even though the sequence starts with 1, the first value inserted is 2:

SELECT * FROM test_table;

       VAL
----------
         2

<小时>

预期行为:

在没有插入的情况下选择 NEXTVAL 按预期工作:

Selecting NEXTVAL without the insert works as expected:

CREATE SEQUENCE test_sequence_2 START WITH 1;

SELECT test_sequence_2.NEXTVAL FROM dual

   NEXTVAL
----------
         1

<小时>

问题:

任何人都可以使用 Oracle 11g 重现此问题吗?这是一个已知问题吗?

Can anyone reproduce this using Oracle 11g? Is this a known issue?

我正在使用
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64 位生产.

推荐答案

这是记录在 11.2 SQL 语言参考 中,它说,

如果您尝试将序列值插入到使用延迟段创建的表中,序列返回的第一个值将被跳过.

If you attempt to insert a sequence value into a table that uses deferred segment creation, the first value that the sequence returns will be skipped.

请参阅 Jeffrey Kemp 对 My Oracle Support (Metalink) 说明和解决方法的回答中的链接.

See the link in Jeffrey Kemp's answer for a My Oracle Support (Metalink) note and a workaround.

这篇关于以 2 而不是 1 开头的 Oracle 序列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

SQL to Generate Periodic Snapshots from Transactions Table(用于从事务表生成定期快照的SQL)
MyBatis support for multiple databases(MyBatis支持多个数据库)
Oracle 12c SQL: Missing column Headers in result(Oracle 12c SQL:结果中缺少列标题)
SQL query to find the number of customers who shopped for 3 consecutive days in month of January 2020(查询2020年1月连续购物3天的客户数量)
How to get top 10 data weekly (This week, Previous week, Last month, 2 months ago, 3 month ago)(如何每周获取前十大数据(本周、前一周、上个月、2个月前、3个月前))
Select the latest record for an Id per day - Oracle pl sql(选择每天ID的最新记录-Oracle pl SQL)