|
原帖由 pandawang 于 2007-9-12 12:26 发表 ![]()
测试了如下,在两个进程中先用执行如下存储过程。现象是先发起的进程会锁住后发起的进程,后发起的进程等待先发起的进程。在sales_test上产生Lmod=6的锁。待先发起的进程结束以后锁解开,后发起的进程执行,最终修改的值是后发起进程的值。
create or replace procedure borrowbook(v_PRODID in number)
IS
v_count number;
v_count2 number;
BEGIN
SELECT count(*) INTO v_count FROM sales_test where prod_id=v_PRODID;
select count(promo_id) into v_count2 from sales_test where prod_id=v_PRODID;
IF v_count>0 THEN
update sales_test set time_id=sysdate+v_count2;
END IF;
commit;
END;
你真的是用多线程模拟的么?
如果第一再更新没有执行的时候,第二个线程也执行完了
SELECT count(*) INTO v_count FROM sales_test where prod_id=v_PRODID;
select count(promo_id) into v_count2 from sales_test where prod_id=v_PRODID;
肯定会出现问题了。 |
|