這篇文章主要介紹了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'';