- 论坛徽章:
- 0
|
我的数据结构是这样的一个表是管状态的,一个表是存数据的。
每次操作因此要更新两个表,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 编辑 ] |
|