一个sqlserver的查询语句要转到orcale中
但是里面用了六七个临时表,贯穿了整个sql语句(五六百行把),舍去不太容易
这个有没有什么比较好的解决方案啊

解决方案 »

  1.   

    直接建表吧,用完drop掉
    比如临时表a在oracle中直接create table tmptablea as select * from tablename;
      

  2.   

    create table 呗
    用完了
    drop
      

  3.   

    可以通过动态创建表实现,步骤如下:
    1、SELECT USERENV('sessionid') INTO V_SESSIONID FROM DUAL;--获取临时表名
    2、检查临时表名是否存在,如存在,删除掉
    SELECT COUNT(*) INTO V_COUNT FROM USER_TABLES WHERE TABLE_NAME='TMP'|| V_SESSIONID;
    IF V_COUNT>0 THEN
      EXECUTE IMMEDIATE 'DROP TABLE TMP'|| V_SESSIONID;
    END IF;
    3、创建临时表
    EXECUTE IMMEDIATE 'CREATE TABLE TMP'|| V_SESSIONID || '(COL1 VARCHAR2(100),COL2 VARCHAR2(100))';
      

  4.   

    这里刚刚整理过有关oracle里临时表的小文章http://blog.csdn.net/inthirties/archive/2009/08/06/4420030.aspx
      

  5.   

     --ON   COMMIT   DELETE   ROWS   说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)     
      --ON   COMMIT   PRESERVE   ROWS   说明临时表是会话指定,当中断会话时ORACLE将截断表。     
      冲突的问题更本不用考虑.     
    看来我多虑了