這篇文章主要介紹了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 不存在
三特性和性能(與普通表和視圖的比較)
臨時表只在當前連接內有效
臨時表不建立索引所以如果數據量比較大或進行多次查詢時不推薦使用
數據處理比較復雜的時候時表快反之視圖快點
在僅僅查詢數據的時候建議用游標 open cursor for sql clause
From:http://tw.wingwit.com/Article/program/Oracle/201311/16806.html