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