oracle/sql创建序列而不触发

oracle/sql创建序列而不触发,sql,oracle,Sql,Oracle,我创建了一个起始值为2的序列 create sequence seq_ben start with 2 increment by 1 nocache nocycle; 当我被要求展示我写的序列的下两个数字时 select seq_ben.nextval from dual 然后我运行了两次代码来给出下两个值,然后我被要求显示下一个序列而不触发它移动下一个数字,并使用它的下三个值向上面的序列添加新行。这可能吗?它如何生成下一个序列而不触发它?如果您在当前会话中至少引用了一次NEXTVAL

我创建了一个起始值为2的序列

create sequence seq_ben
start with 2
increment by 1
nocache
nocycle;
当我被要求展示我写的序列的下两个数字时

select seq_ben.nextval from dual   
然后我运行了两次代码来给出下两个值,然后我被要求显示下一个序列而不触发它移动下一个数字,并使用它的下三个值向上面的序列添加新行。这可能吗?它如何生成下一个序列而不触发它?

如果您在当前会话中至少引用了一次
NEXTVAL
,则可以使用

然而,我相信如果你真的想知道序列中的下一个数字,那么你的设计就有一些根本性的错误。序列的设计使得
NEXTVAL
是一个原子操作,并且没有两个会话可以获得相同的编号。或者一个递增的唯一标识符,换句话说。这是它给你的唯一保证。在这种设计中,要求序列的下一个可能值几乎毫无意义


您可以尝试使用
MAX()
,这通常被用作序列的穷人解决方案。

如果“不触发它”意味着“不调用
nextval
并导致序列递增”,通常情况下,您不能。如果您做出了许多在现实中很荒谬的假设(
nocache
序列,没有其他会话处于活动状态,单用户系统,等等),那么您可能会查询
dba_sequences
视图。我不知道“向上述序列添加新行”可能意味着什么。
currval
获取当前序列号而不增加它。请注意,要使用
currval
,您需要在当前会话中至少调用一次
nextval
。可能重复