12
返回列表 发新帖
楼主: coolfiry

请问如下oracle 的存储过程并发访问时会发生乱数据,脏数据吗?

[复制链接]
论坛徽章:
24
生肖徽章:狗
日期:2006-09-07 10:14:43数据库板块每日发贴之星
日期:2008-07-26 01:02:20生肖徽章2007版:兔
日期:2008-10-13 11:10:11奥运会纪念徽章:铁人三项
日期:2008-10-24 13:27:21开发板块每日发贴之星
日期:2008-12-27 01:01:09生肖徽章2007版:马
日期:2009-11-18 10:45:032010新春纪念徽章
日期:2010-03-01 11:21:02ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51ERP板块每日发贴之星
日期:2011-05-18 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
11#
发表于 2008-11-27 16:14 | 只看该作者
这个只能加for update来阻止后面的进程

使用道具 举报

回复
论坛徽章:
24
生肖徽章:狗
日期:2006-09-07 10:14:43数据库板块每日发贴之星
日期:2008-07-26 01:02:20生肖徽章2007版:兔
日期:2008-10-13 11:10:11奥运会纪念徽章:铁人三项
日期:2008-10-24 13:27:21开发板块每日发贴之星
日期:2008-12-27 01:01:09生肖徽章2007版:马
日期:2009-11-18 10:45:032010新春纪念徽章
日期:2010-03-01 11:21:02ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51ERP板块每日发贴之星
日期:2011-05-18 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
12#
发表于 2008-11-27 16:16 | 只看该作者
原帖由 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;
肯定会出现问题了。

使用道具 举报

回复
论坛徽章:
1
2009新春纪念徽章
日期:2009-01-04 14:52:28
13#
发表于 2008-11-27 17:03 | 只看该作者
update 表 set A字段=A字段 where 条件
也一样可以吧

使用道具 举报

回复
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
14#
发表于 2008-12-1 11:35 | 只看该作者
直接用for update会阻塞其他会话,你可以在更新前查询下,用version的方式来避免丢失更新,你可以参考tom的书.

使用道具 举报

回复
论坛徽章:
1
ITPUB9周年纪念徽章
日期:2010-10-08 09:34:03
15#
发表于 2012-3-15 08:31 | 只看该作者
如果存储过程的begin 和end是事务开始与结束的语法,那么oracle默认的事务隔离级别是提交读(read-commit)那出现的问题可参照"提交读"

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表