数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle中的临时表用法汇总


发布日期:2019年11月03日
 
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 不存在

通过查询创建临时表

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;

上一篇:Oracle初始参数与当前用户

下一篇:数据库知识:Oracle中传输表空间