语法 在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_colv_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 asselect *
from other_tables;
execute immediate str;
end;
特性和性能(与普通表和视图的比较)
临时表只在当前连接内有效
临时表不建立索引所以如果数据量比较大或进行多次查询时不推荐使用
数据处理比较复杂的时候时表快反之视图快点
在仅仅查询数据的时候建议用游标: open cursor for sql clause;