首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

数据库事务 锁和并发有关问题请问.

2012-02-03 
数据库事务 锁和并发问题请教....有以下逻辑的存储过程create or replace procedure pro1()begin--库存计

数据库事务 锁和并发问题请教....
有以下逻辑的存储过程 

create or replace procedure pro1()

begin

  --库存计算
  if *** then
  --库存计算,库存单价计算(进区)
  PRO_TJ_JUDENUMBER_ForNew(strGateJobNo, CustomCode_);//该存储过程中未commit;
  else
  PRO_TJ_JUDENUMBER(strGateJobNo, CustomCode_);//该存储过程中未commit;
  end if;
  //存储过程PRO_TJ_JUDENUMBER_ForNew和PRO_TJ_JUDENUMBER操作同一张表  


  TotalResult := Get_TotalUSA(strGateJobNo);
  if Iresult = '0' or TotalResult = '0' then
  rollback;
  else
  commit;
  end if;

Exception
  When Others Then
  begin
  rollback;
  end;


end pro1;

请问各位大侠,这一的处理逻辑,会出现数据不一致,脏读等问题吗?
请各位数据库高手指教...

[解决办法]

探讨
引用:

逻辑没问题,并发也不会出现脏读
请问会出现数据不一致吗?

[解决办法]
不会出现,放心好了。
因为你的存储过程执行的时候是在一个session里面,你的任何操作下面的处理逻辑都会看到。

并发执行也不会,因为你没有commit,oracle是不会出现别人调用读脏的,不过倒是有可能出现资源争用的情况。

比如:两个人同时运行存储过程,同时修改同一条数据的情况。


探讨
引用:

逻辑没问题,并发也不会出现脏读


请问会出现数据不一致吗?

[解决办法]
如果你程序里面只有单纯的if判断,不会的。

但是如果里面有for循环就肯定会出现的。

热点排行