Oracle11g Oracle SQL开发人员->;手动将序列增量更改10-->;需要承诺
如果我使用Oracle Sql Developer连接到11gR2并执行: 将序列myCounter增量改变10 我是否需要提交此声明。如果我执行此语句,在按下绿色提交按钮之前,网络连接丢失,序列是否仍然递增10 我不完全明白:Oracle11g Oracle SQL开发人员->;手动将序列增量更改10-->;需要承诺,oracle11g,oracle-sqldeveloper,Oracle11g,Oracle Sqldeveloper,如果我使用Oracle Sql Developer连接到11gR2并执行: 将序列myCounter增量改变10 我是否需要提交此声明。如果我执行此语句,在按下绿色提交按钮之前,网络连接丢失,序列是否仍然递增10 我不完全明白: 生成序列号时,序列将递增,与事务提交或回滚无关。您的alter语句不需要提交,因为它是DDL而不是DML。失去连接不会有任何影响。但它本身也不会增加序列值 它所做的是修改序列定义,以便下次以及以后每次调用nextval,生成的数字将增加10,而不是之前设置的任何数字(默
生成序列号时,序列将递增,与事务提交或回滚无关。
您的alter
语句不需要提交,因为它是DDL而不是DML。失去连接不会有任何影响。但它本身也不会增加序列值
它所做的是修改序列定义,以便下次以及以后每次调用nextval
,生成的数字将增加10,而不是之前设置的任何数字(默认值为1)
作为一个快速演示:
CREATE SEQUENCE myCounter;
Sequence MYCOUNTER created.
SELECT myCounter.nextval from dual;
NEXTVAL
----------
1
SELECT myCounter.nextval from dual;
NEXTVAL
----------
2
SELECT myCounter.nextval from dual;
NEXTVAL
----------
3
因此,默认情况下,序列每次递增一。然后在更改后,对nextval
的每次调用都会增加10次,而不是1次:
ALTER SEQUENCE myCounter INCREMENT BY 10;
Sequence MYCOUNTER altered.
SELECT myCounter.nextval from dual;
NEXTVAL
----------
13
SELECT myCounter.nextval from dual;
NEXTVAL
----------
23
alter
本身没有使用或跳过10个值-否则第一个nextval
将得到23个而不是13个。它只是改变了定义
您参考的文档说明,如果您回滚,则不会再次生成以前发布的任何编号:
ROLLBACK;
Rollback complete.
SELECT myCounter.nextval from dual;
NEXTVAL
----------
33
你得到33分,不是23分。发出一个值,然后该值不再可用于任何其他会话,包括您自己的会话,以从另一个nextval
调用获取-无论回滚或提交,或者该值是否实际用于任何用途。(如果序列设置为循环
,最终可能会重新发出,但默认情况下不会)
还要注意的是,序列生成不是无间隙的,也不是无间隙的,因为回滚是如何处理的,缓存机制是如何工作的。数字也不总是严格按顺序发出-在RAC环境中,每个节点都有自己的缓存,并将从缓存中进行分配。您的
alter
语句不需要提交,因为它是DDL而不是DML。失去连接不会有任何影响。但它本身也不会增加序列值
它所做的是修改序列定义,以便下次以及以后每次调用nextval
,生成的数字将增加10,而不是之前设置的任何数字(默认值为1)
作为一个快速演示:
CREATE SEQUENCE myCounter;
Sequence MYCOUNTER created.
SELECT myCounter.nextval from dual;
NEXTVAL
----------
1
SELECT myCounter.nextval from dual;
NEXTVAL
----------
2
SELECT myCounter.nextval from dual;
NEXTVAL
----------
3
因此,默认情况下,序列每次递增一。然后在更改后,对nextval
的每次调用都会增加10次,而不是1次:
ALTER SEQUENCE myCounter INCREMENT BY 10;
Sequence MYCOUNTER altered.
SELECT myCounter.nextval from dual;
NEXTVAL
----------
13
SELECT myCounter.nextval from dual;
NEXTVAL
----------
23
alter
本身没有使用或跳过10个值-否则第一个nextval
将得到23个而不是13个。它只是改变了定义
您参考的文档说明,如果您回滚,则不会再次生成以前发布的任何编号:
ROLLBACK;
Rollback complete.
SELECT myCounter.nextval from dual;
NEXTVAL
----------
33
你得到33分,不是23分。发出一个值,然后该值不再可用于任何其他会话,包括您自己的会话,以从另一个nextval
调用获取-无论回滚或提交,或者该值是否实际用于任何用途。(如果序列设置为循环
,最终可能会重新发出,但默认情况下不会)
还要注意的是,序列生成不是无间隙的,也不是无间隙的,因为回滚是如何处理的,缓存机制是如何工作的。数字也并非总是严格按顺序发布的——在RAC环境中,每个节点都有自己的缓存,并将从这些缓存中进行分配