Oracle自定义序列号生成时的并发操作问题
某流水帐表序列号生成时带有一定规则,如:四位的年份+4位数字的序号20120001,20120002,...
我是每次查询该表取最大值,然后+1,一般来说没有什么问题,可是一旦多人同时并发操作时,例如也许有两个人查询表时,表中最大序号都为20120002,那么下一个最大值都会插入20120003的情况,即有可能得到的流水帐号相同,如何解决这种并发操作而不重号问题?
某流水帐表序列号生成时带有一定规则,如:四位的年份+4位数字的序号20120001,20120002,...
我是每次查询该表取最大值,然后+1,一般来说没有什么问题,可是一旦多人同时并发操作时,例如也许有两个人查询表时,表中最大序号都为20120002,那么下一个最大值都会插入20120003的情况,即有可能得到的流水帐号相同,如何解决这种并发操作而不重号问题?
create sequence SEQ_XXX
minvalue 20120001
maxvalue 999999999999
start with 20120001
increment by 1
nocache;
部门 序号
A 201200001
B 201200001
... ....
所以不可能每个部门都建一个sequence吧?
select 序号 from 表 where 部门 = 'A' for update;
execute your othe query;
update 表 set 序号 = <new value> where ...;
commit;
序列也行,不过在事务失败时会跳号