熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle中的臨時表用法匯總

2013-11-13 22:13:30  來源: Oracle 
語法

  在Oracle中可以創建以下兩種臨時表

  ) 會話特有的臨時表

  CREATE GLOBAL TEMPORARY( )

  ON COMMIT PRESERVE ROWS

  ) 事務特有的臨時表

  CREATE GLOBAL TEMPORARY( )

  ON COMMIT DELETE ROWS

  CREATE GLOBAL TEMPORARY TABLE MyTempTable

  所建的臨時表雖然是存在的但是如果insert 一條記錄然後用別的連接登上去select記錄是空的  

  ON COMMIT DELETE ROWS 說明臨時表是事務指定每次提交後ORACLE將截斷表(刪除全部行)

  ON COMMIT PRESERVE ROWS 說明臨時表是會話指定當中斷會話時ORACLE將截斷表  

動態創建

  create or replace procedure pro_temp(v_col varcharv_col varchar) as

  v_num number;

  begin

  select count(*) into v_num from user_tables where table_name=T_TEMP;  

  create temporary table

  if v_num< then

  execute immediate CREATE GLOBAL TEMPORARY TABLE T_TEMP (

  COL VARCHAR()

  COL VARCHAR()

  ) ON COMMIT delete ROWS;

  end if;  

  insert data

  execute immediate insert into t_temp values(  v_col    v_col  );  

  execute immediate select col from t_temp into v_num;

  dbms_outputput_line(v_num);

  execute immediate delete from t_temp;

  commit;

  execute immediate drop table t_temp;

  end pro_temp;  

  測試:  

  :: SQL> set serveroutput on

  :: SQL> exec pro_temp();

    

  PL/SQL 過程已成功完成  

  已用時間: : :

  :: SQL> desc t_temp;

  ERROR

  ORA: 對象 t_temp 不存在   
    
     通過查詢創建臨時表  
      create proecdure name_pro
      as
      str varchar();
      begin
            str:=CREATE GLOBAL TEMPORARY TABLE TABLENAME ON COMMIT PRESERVE ROWS as  select  *
            from other_tables
            execute immediate str;
      end;

特性和性能(與普通表和視圖的比較)

   臨時表只在當前連接內有效

  臨時表不建立索引所以如果數據量比較大或進行多次查詢時不推薦使用

  數據處理比較復雜的時候時表快反之視圖快點

  在僅僅查詢數據的時候建議用游標: open cursor for sql clause

From:http://tw.wingwit.com/Article/program/Oracle/201311/18537.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.