2011-08-22 91 views
2

,當我在Oracle 11g中SQL *執行這個查詢再加上我會掛:查詢錯誤

SQL> 
declare maxid number; 

begin 

    delete from measure_details 
where id in (select id from general_measures where code in ('12345','12346')); 

delete from general_measures 
where code in (select code from general_measures where code in ('12345','12346')); 

end; 
/
+0

越獄意味着整個事情陷入僵局?如果不是,你得到的錯誤是什麼? –

+1

您在general_measures/measure_details表中有多少條記錄?你有任何參考資料嗎?你能否提供解釋計劃? – HamoriZ

+0

是的安東尼其獲得杭光標閃爍,我的事情,它試圖執行,並花費很多時間 – jaiswal

回答

2

如果「掛起」,那麼這可能意味着一個或多個行的你正在嘗試刪除被另一個會話中的未提交事務鎖定 - 可能甚至是您自己的另一個會話?

+0

嗨我執行提交;在執行該查詢之前仍然是相同的 – jaiswal

+1

如果我的猜測是正確的,那將是另一個窗口或工具或PC中的會話,而不是同一會話。 –

+0

您可以嘗試發出[SELECT FOR UPDATE語句](http://www.techonthenet.com/oracle/cursors/for_update.php)用於測試目的。並且還要更改DELETE語句以使用[WHERE CURRENT OF](http://www.techonthenet.com/oracle/cursors/current_of.php)。 –

1

如果您在這種D​​ML中遇到死鎖,我的第一個懷疑將是非索引外鍵。請看Ask Boy的this文章。 如果是這樣的話。所有你需要做的就是創建合適的索引。 但是再一次,也許你的桌子只是巨大的,它需要一段時間才能完成。

+0

阻塞鎖會導致會話掛起。死鎖會導致腳本失敗並顯示'ORA-00060:Deadlock detected.'錯誤。 – Allan

+0

@Allan。你是對的。 我在OP發佈答案之前澄清說它沒有錯誤,並且它在SQL Developer中運行良好。儘管如此,我仍然希望將答案留在這裏作進一步參考(具有死鎖問題的人可能會看到此頁面,並將其作爲未來的外鍵索引)。 –