免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2277 | 回复: 7
打印 上一主题 下一主题

oracle存储过程的一致性问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-25 10:04 |只看该作者 |倒序浏览
我的数据结构是这样的一个表是管状态的,一个表是存数据的。
每次操作因此要更新两个表,2个sql操作会发生一个已经完成,第二个没完成的情况,导致不同步因此用存储过程,但是用了存储过程后,发现还是会出现一条完成了,还有一条没有被执行的情况(千分之一的概率)

以下是procedure

(BARCODE IN NUMBER,MID IN NUMBER,WORKID IN NUMBER,WORKNAME IN VARCHAR2,PID IN NUMBER,PNAME IN VARCHAR2,FLOWID IN NUMBER,FLOWNAME IN VARCHAR2,AMOUNT IN NUMBER,LINE IN NUMBER,TYPE IN NUMBER,BRIEF IN VARCHAR2)
AS
AB NUMBER(10);
BEGIN
UPDATE BARCODELIST SET CURPOS=CURPOS+1,STATUS=1 WHERE ID=BARCODE AND STATUS=0 AND CURPOS=0;
UPDATE BARCODELIST SET STATUS=1 WHERE ID=BARCODE AND STATUS=0;
INSERT INTO WORKOUT (ID,BARCODE,WORKID,WORKNAME,WORKTIME,PID,PNAME,FLOWID,FLOWNAME,AMOUNT,LINE,TYPE,MID,BRIEF) VALUES (WORKOUT_SEQ.nextval,BARCODE,WORKID,WORKNAME,SYSDATE,PID,PNAME,FLOWID,FLOWNAME,AMOUNT,LINE,TYPE,MID,BRIEF);
COMMIT;
END;

解释:
UPDATE BARCODELIST SET CURPOS=CURPOS+1,STATUS=1 WHERE ID=BARCODE AND STATUS=0 AND CURPOS=0;
UPDATE BARCODELIST SET STATUS=1 WHERE ID=BARCODE AND STATUS=0;
这个两句其实只有一句会被执行
看以下就清楚了
CURPOS STATUS
0           0
1          1
2          0
2         1
...


会出现上面的UPDATE被执行,下面的INSERT没有执行的情况发生,导致数据不同步
不知道为什么呀?
请大侠们看看!

[ 本帖最后由 jacketble 于 2009-9-25 10:07 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-09-29 11:26 |只看该作者
锁定

论坛徽章:
0
3 [报告]
发表于 2009-09-29 11:34 |只看该作者
是否是因为并发的缘故呢.

论坛徽章:
0
4 [报告]
发表于 2009-09-29 14:05 |只看该作者

并发不大,很小

并发不大,很小
只是为了实现数据完整性才用过程的
但是还是有问题

论坛徽章:
0
5 [报告]
发表于 2009-09-29 14:52 |只看该作者
有没有错误判断和处理机制,抓抓错误信息看看

论坛徽章:
0
6 [报告]
发表于 2009-09-30 10:33 |只看该作者
事务分开提交.update commit一次,insert提交一次.
BEGIN
UPDATE BARCODELIST SET CURPOS=CURPOS+1,STATUS=1 WHERE ID=BARCODE AND STATUS=0 AND CURPOS=0;
UPDATE BARCODELIST SET STATUS=1 WHERE ID=BARCODE AND STATUS=0;
COMMIT;
INSERT INTO WORKOUT (ID,BARCODE,WORKID,WORKNAME,WORKTIME,PID,PNAME,FLOWID,FLOWNAME,AMOUNT,LINE,TYPE,MID,BRIEF) VALUES (WORKOUT_SEQ.nextval,BARCODE,WORKID,WORKNAME,SYSDATE,PID,PNAME,FLOWID,FLOWNAME,AMOUNT,LINE,TYPE,MID,BRIEF);
COMMIT;
END;

[ 本帖最后由 xfcy800 于 2009-9-30 10:35 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-09-30 15:52 |只看该作者

试试看,谢谢

运行看看

论坛徽章:
0
8 [报告]
发表于 2009-10-12 10:29 |只看该作者

还是会发生

Commit后,概率一样,还是会发生
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP