在Oracle8i中,可以创建以下两种临时表: 
1。会话特有的临时表 
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification> ) 
ON COMMIT PRESERVE ROWS; 2。事务特有的临时表 
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification> ) 
ON COMMIT DELETE ROWS; 
CREATE GLOBAL TEMPORARY TABLE MyTempTable 
所建的临时表虽然是存在的,但是你试一下insert 一条记录然后用别的连接登上去select,记录是空的,明白了吧。
下面两句话再贴一下: 
--ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行) 
--ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。表的數據隻能在過程中引用,跳出後就隻有結構,沒有數據了

解决方案 »

  1.   

    用sql语句直接将一个表中符合条件,全部插入一张结构和它完全相同的临时表SQL> create table a1 as select * from a;SQL> select count(*) from a1; COUNT(*)
    ---------
           17
      

  2.   

    本人重复申明:
    在过程内操作临时表
    'create globle temporary table test_temp as select * from test'

    'create globle temporary table test_temp as select * from test where 1=2'
    效果一样,若是达到第一条效果,分两步操作'create globle temporary table test_temp as select * from test where 1=2'
    execute immediate ...;
    insert into test_temp select * from test;
    execute immediate ...;