在编译存储过程的时候,n久也没完成,到头来,说了句"等待锁定对象****,超时",我郁闷....
偶尔也能编译成功过的.但是在用pl/sql developer进行test时是从没成功过,同样的,在作为数据源绑定到水晶报表时,也没成功过,郁闷...
描述:
1 我把其中的sql拎出来执行是蛮快的;
2 因为我是把它定义在几个过程一起的包和包体里面,所以怀疑是这个原因,现在单独自己的包和包体,还是不行.所以上来请教各位了:
1 存储过程为什么会发生锁定?有哪几种情况?
2 如何解锁?

解决方案 »

  1.   

    好像问题是出在这里:
    EXISTS (
    SELECT RP_CUS_ID,RP_CP_ID FROM 
    (
     SELECT RP_CUS_ID,RP_CP_ID,COUNT(1) AS NUM
     FROM (SELECT * FROM EB_REPAIR UNION SELECT * FROM EB_REPAIR_HISTORY)RP
     GROUP BY RP_CUS_ID,RP_CP_ID
     HAVING COUNT(1)>1
    )A WHERE A.RP_CUS_ID = V_RPT_REPAIR_MAIN.RP_CUS_ID AND A.RP_CP_ID = V_RPT_REPAIR_MAIN.RP_CP_ID
    )
    去掉这个exists的条件,就ok了,郁闷
    我把它转换成inner join 来实现还是不行,真不知道为什么?
      

  2.   

    EXISTS (
    SELECT RP_CUS_ID,RP_CP_ID FROM 
    (
     SELECT RP_CUS_ID,RP_CP_ID,COUNT(1) AS NUM
     FROM (SELECT * FROM EB_REPAIR UNION SELECT * FROM EB_REPAIR_HISTORY)RP
     GROUP BY RP_CUS_ID,RP_CP_ID
     HAVING COUNT(1)>1
    )A WHERE A.RP_CUS_ID = V_RPT_REPAIR_MAIN.RP_CUS_ID AND A.RP_CP_ID = V_RPT_REPAIR_MAIN.RP_CP_ID
    )如果你这个数据量很大的话,就会出现不能通过.