程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> Oracle數據庫中的臨時表用法

Oracle數據庫中的臨時表用法

編輯:更多數據庫知識

這篇文章主要介紹了Oracle數據庫中的臨時表用法,希望對大家的學習和工作有所幫助。

一:語法

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

(1) 會話特有的臨時表

CREATE GLOBAL TEMPORARY ( ) 

ON COMMIT PRESERVE ROWS;

(2) 事務特有的臨時表

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_col1 varchar2,v_col2 varchar2) as 

v_num number; 

begin 

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

--create temporary table 

if v_num<1 then 

execute immediate ''CREATE GLOBAL TEMPORARY TABLE T_TEMP ( 

COL1 VARCHAR2(10), 

COL2 VARCHAR2(10) 

) ON COMMIT delete ROWS''; 

end if;   

--insert data 

execute immediate ''insert into t_temp values
(''''''  v_col1  '''''',''''''  v_col2  '''''')'';   

execute immediate ''select col1 from t_temp'' into v_num; 

dbms_output.put_line(v_num); 

execute immediate ''delete from t_temp''; 

commit; 

execute immediate ''drop table t_temp''; 

end pro_temp; 

 

測試:  

15:23:54 SQL> set serveroutput on 

15:24:01 SQL> exec pro_temp(''11'',''22''); 

11   

PL/SQL 過程已成功完成。   

已用
            
        
    

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

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

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

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved