就是一个数据库临时表的问题,我现在用存储过程创建了一个临时表,然后再进行删除的时候删除不掉,提示“试图创建,修改或删除正在使用的临时表中的索引” 不知这种情况应怎样解决? 如果我创建一个事务临时表,是不是我在程序中提交以后,临时表会自动消失?但是现在数据库中临时表还是存在的不知什么原因? 麻烦给我给我解答下吧

解决方案 »

  1.   

    临时表不会自动消失,和SQL server里面的DECLARE TABLE @T()不一样
      

  2.   

    只有所有的session都没有再使用临时表时,才可以删除。
      

  3.   

    oracle的临时表目前只支持全局的.并且这个表是一直存在的.
    如过要删除这个临时表.必须确保所有的会话(session)都没在
    使用它.才可以删除.
      

  4.   

    SELECT * FROM V$SESSION WHERE SID IN (
       select a.SID,b.sql_text from v$open_cursor a,v$sql b  where 
       b.SQL_ID=a.SQL_ID and
       upper(b.sql_text) like '%TEMPTABLE%'
      )
    秘密在于V$OPEN_CURSOR,这个DBA视图会保留着当前服务器打开的游标。
    而所有的DML操作,ORACLE都会赋予一个游标的。所以,只要找到这个游标对应的SID,就能找到是那个会话,进而KILL session。