oracle中序列超过最大值问题
sequence exceeds maxvalue problem in oracle
我在大量数据的数据迁移过程中使用序列时遇到序列超过最大值的问题。
如何解决这个问题。
我需要重新创建 table 还是可以更改序列最大限制?
使用 MAXVALUE
创建一个序列(这就是您现在所拥有的):
SQL> create sequence seqa maxvalue 3;
Sequence created.
SQL> select seqa.nextval from dual;
NEXTVAL
----------
1
SQL> select seqa.nextval from dual;
NEXTVAL
----------
2
SQL> select seqa.nextval from dual;
NEXTVAL
----------
3
SQL> select seqa.nextval from dual;
select seqa.nextval from dual
*
ERROR at line 1:
ORA-08004: sequence SEQA.NEXTVAL exceeds MAXVALUE and cannot be instantiated
错误,正如预期的那样(你也有)。所以,改变并设置nomaxvalue
:
SQL> alter sequence seqa nomaxvalue;
Sequence altered.
现在又可以用了:
SQL> select seqa.nextval from dual;
NEXTVAL
----------
4
如果您在 table 中使用序列作为值来唯一标识一行,您可能需要考虑 IDENTITY 列,这样您就可以少担心 1 个对象
创建 table t1(
seq_num 整数默认生成为身份(以 1 开头)不为空,
...
...
我在大量数据的数据迁移过程中使用序列时遇到序列超过最大值的问题。
如何解决这个问题。
我需要重新创建 table 还是可以更改序列最大限制?
使用 MAXVALUE
创建一个序列(这就是您现在所拥有的):
SQL> create sequence seqa maxvalue 3;
Sequence created.
SQL> select seqa.nextval from dual;
NEXTVAL
----------
1
SQL> select seqa.nextval from dual;
NEXTVAL
----------
2
SQL> select seqa.nextval from dual;
NEXTVAL
----------
3
SQL> select seqa.nextval from dual;
select seqa.nextval from dual
*
ERROR at line 1:
ORA-08004: sequence SEQA.NEXTVAL exceeds MAXVALUE and cannot be instantiated
错误,正如预期的那样(你也有)。所以,改变并设置nomaxvalue
:
SQL> alter sequence seqa nomaxvalue;
Sequence altered.
现在又可以用了:
SQL> select seqa.nextval from dual;
NEXTVAL
----------
4
如果您在 table 中使用序列作为值来唯一标识一行,您可能需要考虑 IDENTITY 列,这样您就可以少担心 1 个对象
创建 table t1( seq_num 整数默认生成为身份(以 1 开头)不为空, ... ...