这是我创建的临时表
CREATE GLOBAL TEMPORARY TABLE Balance_Temp001
(
balanceNumber nvarchar2(255),
balanceQty number(28,5),
balanceamount number(28,5),
reimburNumber nvarchar2(255),
reimburAmount number(28,5),
applydeparment nvarchar2(255),
guikoudepartment  nvarchar2(255),
balanefbizdate date,
balanceaduitdate date,
reimburaduitdate date,
norebimburamount number(28,5),
balancetype nvarchar2(100),
fsrcobjectid nvarchar2(255),
fdestobjectid nvarchar2(255),
balancetypeid nvarchar2(255)
)
ON COMMIT PRESERVE ROWS 现在的情况是:
truncate table Balance_Temp001
然后:
drop table Balance_Temp001
报错:
试图创建 更改或删除正在使用的临时表中的索引

解决方案 »

  1.   

    那是因为有的会话还在使用临时表,truncate只对自己会话里面的数据有用,对其他会话的不取作用。如果需要重建,去查看那些会话正在使用Balance_Temp001并杀掉。然后就可以drop了
      

  2.   

    oracle临时表实际是一种永久表,只是数据是临时的,
    不要动不动就drop临时表,这是一种错误的使用oracle临时表的方法。
    试想,你的永久表会动不动就删除?!oracle临时表和sqlserver临时表不是一个概念!!
      

  3.   

    看一下:http://topic.csdn.net/u/20081027/22/35ff1e4b-2a87-420b-98de-1b805997b2f6.html
      

  4.   


    Oracle临时表ORA-14552错误
      

  5.   

    Oracle修改ON COMMIT PRESERVE ROWS的临时表后不会主动释放锁,
    必须要断开会话或者执行truncate操作才能释放断开当前会话,另外启动一会话,然后再删除
      

  6.   

    ---查找还在使用临时表的会话
    SELECT sid, serial#
      FROM v$session
     WHERE sid = (SELECT sid
                    FROM v$lock
                   WHERE id1 = (SELECT object_id
                                  FROM user_objects
                                 WHERE object_name = upper('你的临时表名')));--使用上面查出的sid和serial#,杀掉会话
    ALTER system kill session 'sid,serial#';--然后你就可以drop临时表了