在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.   

    CREATE PROCEDURE drop_table (table_name IN VARCHAR2) AS
       cid INTEGER;
    BEGIN
       /* Open new cursor and return cursor ID. */
       cid := DBMS_SQL.OPEN_CURSOR;
       /* Parse and immediately execute dynamic SQL statement built by
          concatenating table name to DROP TABLE command. */
       DBMS_SQL.PARSE(cid, 'DROP TABLE ' || table_name, dbms_sql.v7);
       /* Close cursor. */
       DBMS_SQL.CLOSE_CURSOR(cid);
    EXCEPTION
       /* If an exception is raised, close cursor before exiting. */
       WHEN OTHERS THEN
          DBMS_SQL.CLOSE_CURSOR(cid);
          RAISE;  -- reraise the exception
    END drop_table;
    用这个例子,我想你可以写一个create table的procedure :-)
      

  2.   

    CREATE GLOBAL TEMPORARY TABLE employee_temp
    AS SELECT * FROM employee;ON COMMIT DELETE ROWS to specify that rows are only visible within the
    transaction
    ON COMMIT PRESERVE ROWS to specify that rows are visible for the entire
    session