CREATE OR REPLACE PROCEDURE GET_MARC_MAXNO
(
    MAXNO OUT NUMBER
) ISBEGIN
select MARC_NUMBER into MAXNO from MARC_NUMBER;
update  MARC_NUMBER set MARC_NUMBER=MARC_NUMBER+1 ;
END GET_MARC_MAXNO;
存储过程 功能很简单   返回当前最大号  并自增1  表MARC_NUMBER 就一个字段 MARC_NUMBER 数值型
当大量客户端 并发调用时   返回值 MAXNO 会不会有重复值  会不会发生死锁  如何改进

解决方案 »

  1.   

    用sequence 不能解决你的问题么?
      

  2.   

    如果表为单行单列:
    select MARC_NUMBER into MAXNO from MARC_NUMBER; 
    update  MARC_NUMBER set MARC_NUMBER=MARC_NUMBER+1 ;
    ====================================================
    update  MARC_NUMBER set MARC_NUMBER= MARC_NUMBER +1 ;
      

  3.   

    因为 Oracle  才刚开始用  这个 解决方案思路也是 从sql server 那搬过来的  也许有更好的解决方案  但是 能力有限 所以发帖
      

  4.   


    表示单行单列的 
    这是什么意思呢  ?  只用一句  update  ?就可以吗  存储过程是有返回值的要
    我现在考虑的是 select....用不用加for update 呢
      

  5.   

    并发度高的话,别人占用锁update没commit之前,你提交的update是没法提交的,而且可能你记录的MAXNO已经过时。
      

  6.   

    那是不是 要用 for update 锁
      

  7.   

    会导致系统性能下降的,建议用sequence代替