序列的currval方法
序列可以通过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返回的是当前会话最后生成的序列,那我这个会话我只生成了序列值1,seq_test.currval应该还是返回1
01:04:18 SCOTT@ orcl>select seq_test.currval from dual; CURRVAL ---------- 1
和预想的一样,验证完成
分类: Oracle SQL