在表中有个字段是 reportno  (报告号)  不是主键.
每次插入数据之前都需要生成的新的报告号.
生成的规则如下:
STQS001-CN2003005    下次生成 STQS001-CN2003006 后三位递增
操作语句是: select max(reportNo) maxReportNo from 表名 where reportNo like  'STQS001-CN2003___'
然后取最大的后三位数加1
同理:
STQS002-CN2003023    下次生成 STQS001-CN2003006
DTQS034-CN2008012    下次生成 DTQS034-CN2008013
等等...
这样操作就有个问题,如果2个人同时操作数据库,同时查出的max(reportNo)是一样的,插入到数据库的时候就会出现相同的 reportNo 就会有错误了.
但是考虑到用 sequences 就需要创建多个sequences ,维护起来比较困难.
想找个好的解决办法,请高手指教!!!
谢谢!

解决方案 »

  1.   

    怎么不能修改???郁闷
    上边有个错误!不好意思!!同理: 
    STQS002-CN2003023    下次生成 STQS001-CN2003024 
    DTQS034-CN2008012    下次生成 DTQS034-CN2008013 
    等等... 
      

  2.   

    你在insert的时候,在insert语句里动态生成报告号,就可以避免了呀,不需要将取报告号和插入拆分成两个动作。
      

  3.   

    select  ...... for update 
      

  4.   


    谢谢啊  那这样的话 别人是不是还可以 进行 select 啊?
      

  5.   

    select  ...... for update 
    该锁表了。