如果想刪除則在處理數據之前判斷是否有你要用的表,如果有則刪除,否則新建一個。
---但是這樣不好,容易造成數據庫碎片,使oracle性能大大降低。
oracle里面的臨時表和固定表差不多,其實沒有必要刪除。不如建立一個比較多的字段的表,
然后再建立一個字段對照表(臨時表字段名,實際字段名/邏輯字段名).

解决方案 »

  1.   

    估计你使用存储过程,所以可以在这里面使用execute immediate("drop table table1");
    当然,jiezhi(浪子)说的有道理,其实不用删除,在使用完之后把数据清空即可!
      

  2.   

    用户是在web页面上调用的这个查询,在一个session结束之前可能调用几次, 所以我要在调用一次之前先删除掉. 每个用户查询的数据不一样, 临时表的结构就不一样,所以建固定表不行.
      

  3.   

    考虑一下用pl/sql 中的 集合
      

  4.   

    我已经搞定了哈delphi+oracle+临时表,多会话情况下通过测试哈
    ---------------------------------------
     procedure Crt_TEMP_TBL(rc out rc_type1)
     is
    sqlstr varchar2(4000);
    begin
     if KXD.CHECK_TEMPTBL_Exist('KXD','delete_tbl')<>0 then 
      --删除临时表用truncate,在其它session中使用一样可以删掉
         sqlstr := 'TRUNCATE table delete_tbl';
         execute immediate sqlstr ;
      end if ;
      
      if KXD.CHECK_TEMPTBL_Exist('KXD','delete_tbl')=0 then 
      //建preserve,delete型临时表都可以看到最后结果,本着节约资源的原则当然用delete类//型了
        sqlstr :='Create global temporary table delete_tbl
                  ON COMMIT delete ROWS 
                   as select aastudent.* from aastudent';
        execute immediate sqlstr ;
      end if ;
     
      
    --  insert into delete_tbl  select sid,sname,cid from aastudent;
      insert into delete_tbl values('cadd','cnadd','1000');
      open rc for select delete_tbl.* from delete_tbl;
     
     end ;


         END ;
     ----  insert into delete_tbl 的一句你注释,再不注释,测试就会发现上面的create global as select ..执行后的临时表中的数据仍然不空,所有上面的代码不爽,强烈建议只定义结构,不要为其赋值,再下面的insert into后数据会保存。临时表的结果通过游标返回.
    通过游标返回数据集见贴:
    http://expert.csdn.net/Expert/topic/2248/2248846.xml?temp=.4557154
    我用的delphi,你的.net可能不一样哈.