首页 > Oracle SQL > 序列的currval方法

序列的currval方法

2014年7月31日 发表评论 阅读评论

序列可以通过currval方法和nextval来获取序列的当前值和下一个值。

首先我创建一个序列:

create sequence SEQ_TEST

minvalue 1

maxvalue 10000

start with 1

increment by 1

nocache

cycle

order;

我打开一个会话执行以下SQL语句

00:59:58 SCOTT@ orcl>select seq_test.currval from dual;

select seq_test.currval from dual

       *

ERROR at line 1:

ORA-08002: sequence SEQ_TEST.CURRVAL is not yet defined in this session

报错了,提示在本会话中尚未定义,通过查询Oracle官方文档才知道原来curval返回的是当前会话中返回的是最后生成的序列,而不是按表面理解的序列的但前值。

我先生成一个序列值,然后看下当前值:

01:00:12 SCOTT@ orcl>select seq_test.nextval from dual;

 

   NEXTVAL

----------

         1

1 row selected.

Elapsed: 00:00:00.09

01:04:06 SCOTT@ orcl>select seq_test.currval from dual;

   CURRVAL

----------

         1

1 row selected.

一切正常了,我现在再开一个窗口(命名SessionB,之前打开的那个叫做SessionA)进一步验证序列当前值的问题

多次执行以下脚本来生成新的序列:

select seq_test.nextval from dual

Session B里查看下序列的当前值

01:07:48 SCOTT@ orcl>select seq_test.currval from dual;

 

   CURRVAL

----------

         5

当前的序列值是5

然后返回SessinA

执行脚本:

select
seq_test.currval from dual;

按照官方的解释,currval返回的是当前会话最后生成的序列,那我这个会话我只生成了序列值1seq_test.currval应该还是返回1

01:04:18 SCOTT@ orcl>select seq_test.currval from dual;

 

   CURRVAL

----------

         1

和预想的一样,验证完成

分类: Oracle SQL 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.