Oracle数据库中的临时表用法
文章作者 100test 发表时间 2008:04:19 13:05:06
来源 100Test.Com百考试题网
  这篇文章主要介绍了Oracle数据库中的临时表用法,希望对大家的学习和工作有所帮助。
  一:语法
  在Oracle中,可以创建以下两种临时表:
  (1) 会话特有的临时表
  CREATE GLOBAL TEMPORARY ( )
  ON COMMIT PRESERVE ROWS;
  (2) 事务特有的临时表
  CREATE GLOBAL TEMPORARY ( )
  ON COMMIT DELETE ROWS;
  CREATE GLOBAL TEMPORARY TABLE MyTempTable
  所建的临时表虽然是存在的,但是如果insert 一条记录然后用别的连接登上去0select,记录是空的。
  ——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 
0select 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 0delete ROWS  . 
end if.   
--insert data 
execute immediate   insert into t_temp values
(        v_col1        ,        v_col2        )  .   
execute immediate   0select col1 from t_temp   into v_num. 
dbms_output.put_line(v_num). 
execute immediate   0delete from t_temp  . 
commit. 
execute immediate   0drop 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 过程已成功完成。   
已用时间: 00: 00: 00.79 
15:24:08 SQL> desc t_temp. 
ERROR: 
ORA-04043: 对象 t_temp 不存在 | 
  三:特性和性能(与普通表和视图的比较)
  临时表只在当前连接内有效
  临时表不建立索引,所以如果数据量比较大或进行多次查询时,不推荐使用
  数据处理比较复杂的时候时表快,反之视图快点
  在仅仅查询数据的时候建议用游标: open cursor for   sql clause  ;