几点吧:
1、maxvalue设为很大其实也没什么关系的,当然不会点更多空间,因为它是存在数据字典中的一条记录,也没什么影响速度的可能,这个不必担心。
2、我认为你的设计有问题,也就是你对pk的设计有问题 ,你不能单单的用sequence生成的什就做为pk了,生成唯一值的方法很多的,
比如to_char(sysdate,'yyyymmddhh24miss')||to_char(sequence1.nextval),这时你可以把这个序列设为cycle了。
1、maxvalue设为很大其实也没什么关系的,当然不会点更多空间,因为它是存在数据字典中的一条记录,也没什么影响速度的可能,这个不必担心。
2、我认为你的设计有问题,也就是你对pk的设计有问题 ,你不能单单的用sequence生成的什就做为pk了,生成唯一值的方法很多的,
比如to_char(sysdate,'yyyymmddhh24miss')||to_char(sequence1.nextval),这时你可以把这个序列设为cycle了。
我觉得你第二点说的蛮好的,是一个非常好的方法,虽然每次生成的时候有点繁琐,但是不失为一个很好的方法。
欢迎大家继续讨论.......
CYCLE item
Specify CYCLE to indicate that the sequence continues to generate values
after reaching either its maximum or minimum value. After an ascending sequence
reaches its maximum value, it generates its minimum value. After a descending
sequence reaches its minimum, it generates its maximum.
NOCYCLE item
Specify NOCYCLE to indicate that the sequence cannot generate more
values after reaching its maximum or minimum value. This is the default.
我想了一下,觉得还是可以检索当前序列种空缺的重用。就是你到达某一个数值后,最后找在某一范围内的当前不存在的数值使用。不过要是你的数据量序列要用number(20),我的估计就行不通,主要速度跟不上。
呵呵,我觉得没那么恐怖吧?
你说的不错,找那些已经删除掉的数据,序列可以回收利用的再用,不过这有点困难,耗的时间和功夫反而变多了很多
可以删除此序列号,重建同名序列号,然后设置start with 和maxvalue.
这样就可以连续了。
总之在设计时就该考虑到这些问题。俺觉得序列号是有好处,但不要滥用,
俺觉得滥用序列号是一种取巧的方法了。
你这种说法的确是对的。
不过等发现这种问题了,才去解决,我觉得这说明在设计结构上
本身就有问题的,当然这个问题不大,用你这种方法可以轻易解决。
MAXVALUE 1.0E28 MINVALUE 1 CYCLE
NOCACHE NOORDER;select to_char(sysdate,'yyyymmdd') || lpad(USERID.nextval,4,'0') into :new.yyghno from dual;一般这样设计,允许它循环,用日期限定它唯一
每次当我刚勇sql/plus登录进的时候,执行上面这个命令就提示错误:
ORA-08002: 序列seq.CURRVAL 尚未在此进程中定义
而如果我执行了select seq.nextval from dual;后,再执行
select seq.currval from dual;时,则可以执行并取出当前序列值了不知道这又是怎么回事,
我查了一下,好像没人提过这个吗