ORACLE 存储过程同步的问题

youzhagui2006 2010-04-08 09:31:39
我在一个存储过程要怎么加锁,每次只能由一个用户其他用户执行,然后其他的用户要等待?
...全文
262 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
娃娃鱼 2010-04-11
  • 打赏
  • 举报
回复
CREATE PROCEDURE proc_A IS
BEGIN
--手工加锁(只有一个用户能成功,其它用户必须等待)
SELECT * FROM temp FOR UPDATE; --temp表用于加锁
--调用proc_B
proc_B; --注意要串行的存储过程B中不能commit,如果必须提交可使用自治事务
--提交并释放表锁
COMMIT;
--其它用户可以调用proc_B
END;
youzhagui2006 2010-04-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tangren 的回复:]

SQL code
CREATE PROCEDURE proc_A IS
BEGIN
--手工加锁(只有一个用户能成功,其它用户必须等待)
SELECT * FROM temp FOR UPDATE; --temp表用于加锁
--调用proc_B
proc_B; --注意要串行的存储过程B中不能commit,如果必须提交可使用自治事务
--提交并释放表锁
COMMIT;
……
[/Quote]
为什么要这样?
能说说原因不?
tangren 2010-04-08
  • 打赏
  • 举报
回复
CREATE PROCEDURE proc_A IS
BEGIN
--手工加锁(只有一个用户能成功,其它用户必须等待)
SELECT * FROM temp FOR UPDATE; --temp表用于加锁
--调用proc_B
proc_B; --注意要串行的存储过程B中不能commit,如果必须提交可使用自治事务
--提交并释放表锁
COMMIT;
--其它用户可以调用proc_B
END;
Adebayor 2010-04-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 adebayor 的回复:]

可以这样:
建立过程A 准备调用过程B
create procedure A is
begin
update table set column = ....;
exex B;
commit;
end;
/
这样就可以了
[/Quote]
上面写的只是伪代码 执行update时会加锁 当你在执行A时(A中执行B)别人只能等待
直到你调用B结束后commit
Adebayor 2010-04-08
  • 打赏
  • 举报
回复
可以这样:
建立过程A 准备调用过程B
create procedure A is
begin
update table set column = ....;
exex B;
commit;
end;
/
这样就可以了

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧