Skip to content

使用序列值

序列值通过标识访问使用。

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的生命周期:仅存在于会话中,且每个会话之间独立。