oille101 2021-03-13 22:21 采纳率: 50%
浏览 434
已采纳

关于oracle数据库存储过程中update语句执行以后锁表问题

oracle执行比较大的存储过程中,同一个表,同一组数据,执行完UPDATE语句操作,并commit以后,紧接着执行MERGE INTO 语句时,会出现上面的UPDATE语句锁表的问题:


     UPDATE PB_BALANCE_ACCOUNT_DTL T SET T.ENDCOST = NVL(T.BEGINCOST,0)+NVL(T.CURRENTCOST,0)
     WHERE T.CORPORATION=corp AND T.FARM=fa AND T.MONTH=mon AND T.COSTSTATUS=0;
     COMMIT;

    -----
     MERGE INTO PB_BALANCE_ACCOUNT_DTL T1
     USING(
        SELECT T.PID,T.COSTTYPE,T.ENDCOST ECOST,T.PPH FROM PB_BALANCE_ACCOUNT_DTL T WHERE              T.COSTSTATUS=0 AND T.CORPORATION=corp AND T.FARM=fa AND T.MONTH=mon 
     )T2 ON(T1.PID=T2.PID AND T1.COSTTYPE=T2.COSTTYPE AND T1.CORPORATION=corp AND T1.FARM=fa AND T1.MONTH=mon AND T1.PPH=T2.PPH+1)
     WHEN MATCHED THEN
       UPDATE SET T1.BEGINCOST=T2.ECOST;
     COMMIT;

 上面两句语句,执行的是同一个表数据,第一句执行完update以后并commit;然后执行第二句merge into时,会锁定第一句update语句,造成表PB_BALANCE_ACCOUNT_DTL锁表;请oracle大神能江湖救急。

  • 写回答

4条回答 默认 最新

  • 罗浮魅影 2021-03-14 01:45
    关注

     分析问题,第二句和第一句相互独立,提交后执行第二句,出问题也就只是第二句更新问题。为什么会锁定第一句的更新?
     第二句锁表问题,没有看出merge into问题所在,建议探查一下数据是否存在更新T1时同时有T2条件的数据。
     分析需求,根据语句看来没有插入命令,仅是自连接更新表内数据,插入更新改写成了更新语句(未验证)可以试试
     

     update PB_BALANCE_ACCOUNT_DTL T1
        set T1.BEGINCOST = 
    		 (select ECOST from PB_BALANCE_ACCOUNT_DTL t2 
    		  where T1.PID=T2.PID 
    			AND T1.COSTTYPE=T2.COSTTYPE 
    			AND T1.PPH=T2.PPH+1
    			AND T2.COSTSTATUS=0 		
    			AND T2.CORPORATION=corp 
    			AND T2.FARM=fa 
    			AND T2.MONTH=mon) 
      where T1.CORPORATION=corp 
    	AND T1.FARM=fa 
    	AND T1.MONTH=mon;
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 angular项目错误
  • ¥20 需要帮我远程操控一下,运行一下我的那个代码,我觉得我无能为力了
  • ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。
  • ¥15 请问用arcgis处理一些数据和图形,通常里面有一个根据点划泰森多边形的命令,直接划的弊端是只能执行一个完整的边界,但是我们有时候会用到需要在有很多边界内利用点来执行划泰森多边形的命令
  • ¥30 在wave2foam中执行setWaveField时遇到了如下的浮点异常问题,请问该如何解决呢?
  • ¥750 关于一道数论方面的问题,求解答!(关键词-数学方法)
  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件