SQLSERVER有临时表,表变量 ,ORACLE中有吗,没有的话用什么来代替啊

解决方案 »

  1.   

    有,CREATE OR REPLACE TEMPTABLE GOALBE 你去查查就知道了
      

  2.   

    zt
    对全局临时表的总结在临时表上的操作比在一般的表上的操作要快。因为:
    1创建临时表不需要往编目表中插入条目,临时表的使用也不需要访问编目表,因此也没有对编目表的争用。
    2仅有创建临时表的app才可存取临时表,所以在处理临时表时没有锁。
    3如果指定NOT LOGGED选项,在处理临时表时不记日志。所以如果有仅在数据库的一个会话中使用的大量临时数据,把这些数据存入临时表能大大提高性能。
    DECLARE GLOBAL TEMPORARY TABLE TT(C1 INT, C2 CHAR(20));
    在CONNECT RESET命令后,临时表不再存在。
    建临时表是动态编译的,所以对临时表的使用也必须放在DECLARE CURSER 后面
    CREATE PROCEDURE INSTT2(P1 INT, P2 CHAR(20))
    BEGIN
      DECLARE GLOBAL TEMPORARY TABLE TT(C1 INT, C2 CHAR(20)) %
      INSERT INTO SESSION.TT VALUES(P1, P2);
      BEGIN
        DECLARE C1 CURSOR WITH RETURN FOR SELECT * FROM SESSION.TT;
      END;
    END %2。事务特有的临时表
       CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>)
       ON COMMIT DELETE ROWS;
      
      在Oracle中,全局临时表并不会删除,实际上你只需要建立一次,以后直接应用就行了,这与MS和Sybase不一样。实际上在断开数据库连接时,临时表中数据自动清空,不同的Session之间是隔离的,不许要当心相互影响,不过如果起用了连接共享的话,你要用On Commit delete rows使数据仅在事物内部有效。
      

  3.   

    zt
    不同:
    1. SQL SERVER临时表是一种”内存表”,表是存储在内存中的.ORACLE临时表除非执行DROP TABLE,否则表定义会保留在数据字典中.
    2. SQL SERVER临时表不存在类似ORACLE临时表 事务级别 上的功能.
    3 SQL SERVER本地临时表(#) 与 ORACLE的会话级别临时表类似,但是在会话退出的时候,ORACLE不会删除表.
    4 SQL SERVER的全局临时表(##) 是指多个连接共享同一片内存.当没有指针引用该内存区域时,SQL SERVER自动释放全局临时表.
    5 由于ORACLE不是一种 内存中的数据库. 所以如果ORACLE类似SQL SERVER 频繁的对临时表进行建立和删除,必定会影响性能.所以ORACLE会保留临时表的定义直到用户DROP TABLE.
    6 在ORACLE中,如果需要多个用户共享一个表(类似SQL SERVER的全局临时表##).则可以利用永久表,并且在表中添加一些可以唯一标识用户的列.利用触发器和视图.当用户退出的时候,根据该登陆用户的唯一信息删除相应的表中的数据. 这种方法给ORACLE带来了一定量的负载.
      

  4.   

    在存储过程begin end ;之间在create或 DECLARE global TEMPORARY TABLE TT,出错啊,
      

  5.   


    是TEMPORARY  
    CREATE  GLOBAL  TEMPORARY  TABLE  flight_schedule  (  
         startdate  DATE,    
         enddate  DATE,    
         cost  NUMBER)  
     
    ---------------------------------------------------------------  
     
    create  proecdure  name_pro  
    as  
    str  varchar2(100);  
    begin  
    str:='CREATE  GLOBAL  TEMPORARY  TABLE  TABLENAME  ON  COMMIT  PRESERVE  ROWS  as  select  *  from  others_table';  
    execute  immediate  str;  
    end;  
    /
      

  6.   

    test
    CREATE OR REPLACE PROCEDURE p_ll IS
    strsql varchar2(1000);
    BEGIN
       strsql :='CREATE GLOBAL TEMPORARY TABLE tmp_ll01 '
                || '(CTRL_ENT_ID VARCHAR2(100),COL_ENT_ID VARCHAR2(100),updateable INTEGER,ENABLED INTEGER,VISIBLE INTEGER'
                || ',INSERTABLE INTEGER,deleteable INTEGER,CHANGEABLE INTEGER) on commit preserve rows';         EXECUTE IMMEDIATE strsql;
       EXCEPTION
         WHEN NO_DATA_FOUND THEN
           NULL;
         WHEN OTHERS THEN
           -- Consider logging the error and then re-raise
           RAISE;
    END p_ll;/
      

  7.   

    begin
    p_ll();
    end;--正确执行