查看sequence的当前值

如果想查看某个sequence当前的值,可以通过查询user_sequences这个视图,此视图的所有者是sys:

SELECT LAST_NUMBER,INCREMENT_BY FROM USER_SEQUENCES WHERE SEQUENCE_NAME='S_MYSEQUENCE'

然后用查询到的LAST_NUMBER的值减去INCREMENT_BY的值,这样得到的才是真正的当前值。user_sequences中对LAST_NUMBER的解释是“last sequence number written to disk”,而我们用nextval得到的值正是这个LAST_NUMBER的值,是不是表示这个LAST_NUMBER是最后一次写入磁盘的值,如果用nextval就是取这个值,取完这个值后,oracle就把下一值写入use_sequences这个表中对应的sequence中?应该可以这样理解。所以我们要用“LAST_NUMBER-INCREMENT_BY”这条公式来取sequence的当前值。

 

如果想修改sequence的当前值,只能先删后建:

DROP SEQUENCE MYUSER.S_MYSEQUENCE

CREATE SEQUENCE MYUSER.S_MYSEQUENCE

START WITH 2  --此行中的2修改为自己想要修改的值
INCREMENT BY 1
MINVALUE 0
NOCACHE
NOCYCLE
NOORDER

 

上面的语句中没有指明MAXVALUE,表明没有最大值,sequence会一直向上增长到足够大,其实我们看看script可以看到oracle为它设定的最大值是:999999999999999999999999999,这么大,应该足够了吧。

网上有些说法是:SELECT MYSEQUENCE.CURRVAL FROM DUAL,其实这种方法有时是行不通的,要用这种方法得到sequence的当前值,必须在当前会话中使用过 nextval 后,才能使用 currval,否则会报错:ORA-08002: sequence MYSEQUENCE.CURRVAL is not yet defined in this session,所以查询USER_SEQUENCES表是最可行的。

你可能感兴趣的:(Oracle相关)