最近碰到一种情况,需要限制某个存储过程只能有一个进程在执行,上一个执行完毕后下一个再执行。也就是类似与程序开发中的线程同步问题。 汇总一个下,可以通过如下方法来实现。 1、设置一个变量,或者表中的某个字段为标识位,执行时设置为某个值,执行完后
最近碰到一种情况,需要限制某个存储过程只能有一个进程在执行,上一个执行完毕后下一个再执行。也就是类似与程序开发中的线程同步问题。
汇总一个下,可以通过如下方法来实现。
1、设置一个变量,或者表中的某个字段为标识位,执行时设置为某个值,执行完后再设置为原来的值。
这种方式的要求设置标识位的地方和判断这个标识位的地方间隔时间不能太长,否则还是达不到要求。
2、使用行锁来实现。
比如建一个表t_test,插入几条数据。 在存储过程开始的地方
select s.id into v_sn from t_test s for update;
v_sn-是定义的变量,因为在存储过程中直接select for update这种形式的话,会编译错误,所以需要加上into。
完全公开源代码,并无任何许可限制 特别基于大型电子商务网站的系统开发 Microsoft SQL Server 2000后台数据库,充分应用了存储过程的巨大功效 基于类模块的扩展数据访问能力支持任何类型的大型数据库 加密用户登录信息(cookie) 易于安装的系统和应用功能 100%的asp.net的代码,没有COM,java或者其他的格式 完全基于MS建议的系统安全设计 最佳的应用程序,数据库
然后在存储过程结束时,commit或者rollback。当然为了更保险,可使用异常捕获。
当然为了防止死锁,可以在for update后加上wait 时间。这样到了这个时间这个存储过程会报异常并结束,防止长时间锁住。
具体脚本如下:
create or replace procedure test_pro is
v_sn varchar2;
begin
select s.id
into v_sn
from t_test s for update wait 10;--10s
--自己的执行脚本
commit;--或者rollback;
EXCEPTION
WHEN OTHERS THEN
BEGIN
ROLLBACK;
END;
end test_pro;这样可以实现一般的阻塞存储过程。









