CREATE PROCEDURE proc_A IS BEGIN --手工加锁(只有一个用户能成功,其它用户必须等待) SELECT * FROM temp FOR UPDATE; --temp表用于加锁 --调用proc_B proc_B; --注意要串行的存储过程B中不能commit,如果必须提交可使用自治事务 --提交并释放表锁 COMMIT; --其它用户可以调用proc_B END;
CREATE PROCEDURE proc_A IS BEGIN --手工加锁(只有一个用户能成功,其它用户必须等待) SELECT * FROM temp FOR UPDATE; --temp表用于加锁 --调用proc_B proc_B; --注意要串行的存储过程B中不能commit,如果必须提交可使用自治事务 --提交并释放表锁 COMMIT; --其它用户可以调用proc_B END;
建立过程A 准备调用过程B
create procedure A is
begin
update table set column = ....;
exex B;
commit;
end;
/
这样就可以了
直到你调用B结束后commit
BEGIN
--手工加锁(只有一个用户能成功,其它用户必须等待)
SELECT * FROM temp FOR UPDATE; --temp表用于加锁
--调用proc_B
proc_B; --注意要串行的存储过程B中不能commit,如果必须提交可使用自治事务
--提交并释放表锁
COMMIT;
--其它用户可以调用proc_B
END;
BEGIN
--手工加锁(只有一个用户能成功,其它用户必须等待)
SELECT * FROM temp FOR UPDATE; --temp表用于加锁
--调用proc_B
proc_B; --注意要串行的存储过程B中不能commit,如果必须提交可使用自治事务
--提交并释放表锁
COMMIT;
--其它用户可以调用proc_B
END;