我开了2个会话,A和B,我用B把Z行NOWAIT掉了,然后试图用会话A更新Z行,怎么还是一直等待B的COMMIT或者ROLLBACK,不是说加NOWAIT的话不等待直接出异常吗?谢谢!

解决方案 »

  1.   

    我想你应该在你的A会话中加NOWAIT,而不是在B会话中加吧. 因为B执行的时候,并无其他会话锁定Z,所以B中应该是看不到任何错误的. 相反A中因为没加,所以它等待了.
      

  2.   

    啊?在A中NOWAIT的话,只能在A内部是不等待直接报错吗?在B会话里还是照样等待吗??
      

  3.   

    在最先执行的会话中加不加nowait都无所谓,在第二个执行的会话中加上nowait就不会阻塞了。
      

  4.   

    nowait的目的不就是不让别的会话等待此会话锁的释放吗?谁来仔细解释一下?
      

  5.   

    应该是说,nowait用来不等别人的会话锁的释放。
      

  6.   

    This optional keyword tells Oracle not to wait if the table has been locked by another user.
    同上,如果别人比你先LOCK了,你就不等它了,先干其他事情。