有一个表A
ID是主键
Name CHAR(16)
begintime DATE
endtime  DATE
ISTRUE  INTEGER
更新时 
UPDATE A set Name ='5324',Istrue='1'
,starttime=to_date('2011-03-17 22:00:00','yyyy-mm-dd hh24:mi:ss')
,endtime=to_date('2011-03-18 00:00:00','yyyy-mm-dd hh24:mi:ss') 
where ID=158当时在SQL Window里面一直执行,也不报错,也不提交。请问是什么原因?
该如何让它更新成功那?

解决方案 »

  1.   


    UPDATE A set Name ='5324',Istrue='1'
    ,starttime=to_date('2011-03-17 22:00:00','yyyy-mm-dd hh24:mi:ss')
    ,endtime=to_date('2011-03-18 00:00:00','yyyy-mm-dd hh24:mi:ss')  
    where ID=158;commit;
      

  2.   

    UPDATE A set Name ='5324',Istrue='1'
    ,starttime=to_date('2011-03-17 22:00:00','yyyy-mm-dd hh24:mi:ss')
    ,endtime=to_date('2011-03-18 00:00:01','yyyy-mm-dd hh24:mi:ss') 
    where ID=158;
    commit;
      

  3.   

    select s.SID,
           s.SERIAL#,
           l.LMODE,
           lo.ORACLE_USERNAME,
           lo.OS_USER_NAME,
           s.MACHINE,
           s.TERMINAL,
           ao.owner,
           ao.object_name,
           s.ACTION,
           s.EVENT,
           s.SERVICE_NAME,
           s.LOGON_TIME
      from v$lock          l,
           v$locked_object lo,
           all_objects     ao,
           dba_objects     do,
           v$session       s
     where l.SID = s.SID
       and lo.SESSION_ID = s.SID
       and l.ID1 = do.object_id
       and lo.OBJECT_ID = do.object_id
       and ao.object_id = lo.OBJECT_ID
       and lo.PROCESS = s.PROCESS
    用这个语句查询哪些表被锁了
    然后alter system kill session 'SID,SERIAL'杀掉锁表的进程就行
      

  4.   


    --肯定是你请求的数据行正被其他dml操作所占用着,而那个语句一直没有提交,
    --所以导致了你的更新语句处于等待状态
      

  5.   

    那应该怎么去做那?
    如何查看是否在占着,以及如何去结束其他的dml?
      

  6.   

       SELECT * FROM v$locked_object
       WHERE object_id = 
       (
       SELECT OBJECT_ID FROM all_objects WHERE object_name = 'A' 
       ) 试试看