这篇文章主要介绍了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_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 不存在
三特性和性能(与普通表和视图的比较)
临时表只在当前连接内有效
临时表不建立索引所以如果数据量比较大或进行多次查询时不推荐使用
数据处理比较复杂的时候时表快反之视图快点
在仅仅查询数据的时候建议用游标 open cursor for sql clause