使用存储过程向数据库的一张表中插入记录,
表名:t_ps_backorderentry。其中有一列:
列名:fseq integer
fseq是一个自动增长的字段。创建一个sequence,起始值1,最大值1000.
每次进入存储过程时,删除该sequence,重新建立。
问题出现:多用操作时,因为sequence是全局的,所有session用的是同一个东西。有可能其他用户正在使用,然后sequence被删除,然后盗用 nextval时就出错。查网上资料这东西又不能加锁。各位有没有有遇到这种情况,或者有其他解决思路。多谢

解决方案 »

  1.   

    每次进入存储过程时,删除该sequence,重新建立。 
    ===========================================
    为什么这样做?
      

  2.   

    fseq的sequence你增长了多少,之后在负增长多少就行了,不用每次删除sequence。
    declare   
      n   number(10);   
      tsql   varchar2(100);   
      begin   
      select   my_seg.nextval   into   n   from   dual;//my_seg為序列名   
      n:=-(n-1);   
      tsql:='alter   sequence   my_seg   increment   by'||   n;   
      execute   immediate   tsql;   
      select   my_seg.nextval   into   n   from   dual;   
      tsql:='alter   sequence   my_seg   increment   by   1';   
      execute   immediate   tsql;   
      end;   
      /   这是我看到的一段代码,你可以看看