首先select * from ...for update no wait尝试锁定需要更新的纪录,然后再update

解决方案 »

  1.   

    查看是否存在锁就可以了.
    或者你执行一下其他的操作比如删除表操作.就会报出....wait你可以执行下面这个sql来查询数据库锁.
    SELECT S.SID SESSION_ID,s.MACHINE,s.SERIAL#,   
           S.USERNAME,
           DECODE(LMODE,0,'None',
                  1,'Null',
                  2,'Row-S (SS)',
                  3,'Row-X (SX)',
                  4,'Share',
                  5,'S/Row-X (SSX)',
                  6,'Exclusive',
                  TO_CHAR(LMODE)) MODE_HELD,
           DECODE(REQUEST, 0,'None',
                  1,'Null',
                  2,'Row-S (SS)',
                  3,'Row-X (SX)',
                  4,'Share',
                  5,'S/Row-X (SSX)',
                  6,'Exclusive',
                  TO_CHAR(REQUEST)) MODE_REQUESTED,
           O.OWNER || '.' || O.OBJECT_NAME || ' (' || O.OBJECT_TYPE || ')',S.TYPE LOCK_TYPE,
           L.ID1 LOCK_ID1,
           L.ID2 LOCK_ID2
      FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S
     WHERE L.SID = S.SID
       AND L.ID1 = O.OBJECT_ID
      

  2.   

    DML语句应该不能加nowait吧?