insert into b select * from a where id=1; update a set flag=f where id=1;
CREATE OR REPLACE PROCEDURE PRO_TEST IS BEGIN INSERT INTO B SELECT * FROM A WHERE ID = 1; UPDATE A SET FLAG = F WHERE ID = 1; COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; END PRO_TEST;
为什么还要写过程呢,不用那么麻烦了吧。
好像不行吧,他这里还有个把这些记录的flag字段改成F(a表里的)
select * from a where id=1;
update a set flag=f where id=1;
CREATE OR REPLACE PROCEDURE PRO_TEST IS
BEGIN
INSERT INTO B
SELECT * FROM A WHERE ID = 1;
UPDATE A SET FLAG = F WHERE ID = 1;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END PRO_TEST;
请问执行完了INSERT INTO B.....这行(假设数据量大,次语句执行时间长),碰巧a表数据发生变动,然后过程继续执行UPDATE A......,这时数据就不同步了,怎么避免出现这种情况?