Oracle Sequence starting with 2 instead of 1(以 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 序列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:以 2 而不是 1 开头的 Oracle 序列


基础教程推荐
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- SQL Server 2016更改对象所有者 2022-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- Sql Server 字符串到日期的转换 2021-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01