select *
into #aaa
from ccc
where ...创建临时表的语句在ORACLE中应该如何实现?
看了一下ORACLE的临时表,好像与SQL SERVER有很大不同。
我只要能达到如上的效果就行,寻找最简洁有效的方法。

解决方案 »

  1.   

      CREATE GLOBAL TEMPORARY TABLE tmpAbilities   
      (   
          ABILITYID   NUMBER(5),   
          ABILITYNAME   NVARCHAR2(200) ,   
          ABILITYDEFINE   NVARCHAR2(2000) ,   
          ACTIONDEFINE   NVARCHAR2(2000) ,   
          USECHK   NUMBER(1) ,   
          PREFESSIONALCHK   NUMBER(1)   
      ) ON COMMIT PRESERVE ROWS;             INSERT INTO tmpAbilities
      SELECT a.*
      FROM Abilities a
      WHERE a.PrefessionalChk!=1
      UNION 
      SELECT b.*
      FROM AbilityStandards a 
      INNER JOIN Abilities b ON b.AbilityID=a.AbilityID AND b.PrefessionalChk=1
      INNER JOIN Employees c ON c.PositionCode=a.PositionCode
      INNER JOIN UserInfo d ON d.EmpID=c.EmpID
      WHERE d.UserID='seahi'
      ORDER BY 1;
      
      SELECT a.*
             ,(SELECT MAX(x1.AbilityID) FROM tmpAbilities x1 WHERE x1.AbilityID<a.Abilityid) AS PrevAbilityID
             ,(SELECT MIN(x1.AbilityID) FROM tmpAbilities x1 WHERE x1.AbilityID>a.Abilityid) AS NextAbilityID
      FROM tmpAbilities a
      ORDER BY 1;
      
      DROP TABLE tmpAbilities;请看看我实现的方法,但感觉有点麻烦,另外不知道多用户并发的时候是否会有串数据的可能?
    另外以上语句执行到DROP TABLE tmpAbilities;报错误:
    ORA-14452:试图创建,更改或删除正在使用的临时表中的索引
    这是怎么回事?
      

  2.   

    临时表分两种,根据SESSION和TRANSACTION分。
    CREATE GLOBAL TEMPORARY TABLE table_name ON COMMIT PRESERVE ROWS.
    在SESSION结束是自动删除。
    CREATE GLOBAL TEMPORARY TABLE table_name ON COMMIT DELETE ROWS
    在提交COMMIT命令时候自动删除。每个用户登录时会生成对应的临时表,不会有串数据的情况。
      

  3.   

    ORACLE的临时表有两种,
    CREATE GLOBAL TEMPORARY TABLE table_name ON COMMIT PRESERVE ROWS.
    在SESSION结束时(JDBC中的connention close时)自动删除,不产生redo log.
    CREATE GLOBAL TEMPORARY TABLE table_name ON COMMIT DELETE ROWS
    在提交COMMIT命令时候(JDBC中的connention commit时)自动删除。
    每个用户登录时会生成对应的临时表,不会有串数据的情况,ORACLE的临时表是预先建好的,不推荐像SQL SERVER那样在用的时候建.
      

  4.   

    http://www.inthirties.com/thread-11-2-1.html