database - oracle中的sequence.nextval似乎增加了两次

标签 database oracle oracle11g

我试图了解 nextval 如何递增序列: 在下面的内容中,似乎在 INSERT INTO ...VALUES 语句中, nextval 将增加序列的两倍。但仅限于第一次这样的声明。 我不明白 ORACLE manual 中出现这种行为的原因

CREATE TABLE test_table(a INT);
CREATE SEQUENCE seqa START WITH 10;
CREATE SEQUENCE seqb START WITH 10;

INSERT INTO test_table VALUES(seqb.NEXTVAL);
INSERT INTO test_table VALUES(seqb.NEXTVAL);
SELECT * FROM test_table;

生成的测试表:

A
-----
11
12

而:

SELECT seqa.NEXTVAL FROM DUAL; -- returns 10

最佳答案

这不会发生在我身上(在 Oracle 12C 上):

SQL> CREATE TABLE test_table(a INT);

Table created.

SQL> CREATE SEQUENCE seqa START WITH 10;

Sequence created.

SQL> CREATE SEQUENCE seqb START WITH 10;

Sequence created.

SQL> INSERT INTO test_table VALUES(seqb.NEXTVAL);

1 row created.

SQL> INSERT INTO test_table VALUES(seqb.NEXTVAL);

1 row created.

SQL> SELECT * FROM test_table;

         A
----------
        10
        11

关于database - oracle中的sequence.nextval似乎增加了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27862637/

相关文章:

sql - 选择拥有所有类型自行车的所有者

database - Elasticsearch作为聊天应用程序的主要数据源

sql - oracle中这些各种sql表的等价物是什么

sql - 将逗号分隔的值拆分为Oracle中的列

oracle - 从 SQL Developer 将 CLOB 插入 Oracle 数据库

sql - 在 SQL 中构造 FROM

database - 数据库中一张大表还是许多小表?

oracle - PLS-00201 - 必须声明标识符

database - 用于在开发数据库上创建类似 "test"环境的工具

sql - 如何在 pl sql 中为匿名 block 或查询设置超时?