2011-08-22 93 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中运行良好。尽管如此,我仍然希望将答案留在这里作进一步参考(具有死锁问题的人可能会看到此页面,并将其作为未来的外键索引)。 –