使用序列值
序列值通过标识访问使用。
NEXTVAL
获取序列的下一个值。
具体实例如下:
sql
-- 创建序列值
SQL> CREATE SEQUENCE seq_test2 MINVALUE 1 MAXVALUE 1000 START WITH 100 INCREMENT BY 1;
-- 获取序列的下一个值
SQL> SELECT seq_test2.NEXTVAL FROM DUAL;
EXPR1 |
------------------------------------------------------------------------------
100 |
CURRVAL
获取序列的当前值。
CURRVAL
返回的是当前会话中最近一次通过NEXTVAL
获取的序列值。如果在调用NEXTVAL
之前尝试使用CURRVAL
则会报错,因为此时CURRVAL
还没有可用的值。
具体实例如下:
sql
-- 创建序列值
SQL> CREATE SEQUENCE seq1_test MINVALUE 1 MAXVALUE 1000 START WITH 100 INCREMENT BY 1;
-- 第一次尝试使用CURRVAL
SQL> SELECT CURRVAL('seq1_test') FROM DUAL;
Error: [E7019 L1 C8] 当前会话中序列值seq1_test.CURRVAL不可用
-- 调用NEXTVAL
SQL> SELECT seq1_test.NEXTVAL FROM DUAL;
EXPR1 |
------------------------------------------------------------------------------
100 |
-- 再次尝试使用CURRVAL
SQL> SELECT CURRVAL('seq1_test') FROM DUAL;
EXPR1 |
------------------------------------------------------------------------------
100 |
注意:
- 若指定序列值在当前用户会话中还未获取过序列值,则此函数将抛出错误(如示例中所示)。
- CURRVAL的生命周期:仅存在于会话中,且每个会话之间独立。