oracle关于sequence的个人理解
1. sequence在多用户使用时的同步问题
个人感觉sequence是以连接(会话)为基础,类似于java中使用mysql的一个connection
网上很多人提到了刚创建完一个sequence时使用sequence.currval之前必须要使用sequence.nextval
报错如下所示:
但是这个报错并不是只在刚开始创建sequence的时候会有,而是你每一次重新连接的时候都会出现的
如箭头所示,重新连接后再次使用还是会报错,只有先使用过sequence.nextval才行
总结: sequence.current的值时保存在一个会话中的,同一个连接中每次调用nextval都会刷新currval的值
这也就解决了多用户情况下会出现不同步的问题,因为currval只与会话有关,当同一个会话中没有调用nextval时,currval的值时不会发生改变的,即使其他的用户调用了nextval
以下是演示: