Oracle 临时表

在Oracle8i或以上版本中,可以创建以下两种临时表:
1.会话特有的临时表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>)
ON COMMIT PRESERVE ROWS;
2.事务特有的临时表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>)
ON COMMIT DELETE ROWS;

但是对比DB2,Oracle的临时表有着很大的却别。
就像是JSP一样,Oracle的临时表是存放在application的。
也就是说,所有的存储过程都能够访问这个临时表。
其实,临时表就像是普通的表一样。

而在DB2,临时表前面会有SESSION.XX_TMP_TBL
无论你怎么搞这个临时表,都是存在SESSION里面。
而且每个存储过程内部可以构建和删除这样的临时表,相互独立。

对比Oracle,使不能在SP(存储过程)里面使用DDL。
也就是CREATE TABLE,CREATE INDEX这样的。

补充一点,DB2的临时表和Oracle的临时表上面都可以构建索引,INDEX。
但是DB2是SESSION.INDEX。
而Oracle使用的是普通的INDEX声明。

Oracle中可以对临时表创建索引,视图,出发器,可以用export和import工具导入导出表的定义,但是不能导出数据。表的定义对所有的会话可见。

创建时:
CREATE GLOBAL TEMPORARY TABLE QCUI_Temp_Trans 
 ON COMMIT DELETE ROWS [ON COMMIT PRESERVE ROWS]
 AS 
 SELECT * FROM t_Department

删除时:
DROP TABLE QCUI_Temp_Trans 


下面介绍在存储过程中使用临时表的例子:
CREATE OR REPLACE PROCEDURE temptest 
(p_searchDate IN DATE) 
IS 
v_count INT; 
str varchar2(300); 
BEGIN 
v_count := 0; 
str:='drop table SETT_DAILYTEST'; 
execute immediate str; 
str:='CREATE GLOBAL TEMPORARY TABLE SETT_DAILYTEST ( 
NACCOUNTID NUMBER not null, 
NSUBACCOUNTID NUMBER not null) 
ON COMMIT PRESERVE ROWS'; 
execute immediate str; ----使用动态SQL语句来执行 
str:='insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance)'; 
execute immediate str; 
END temptest;






你可能感兴趣的:(Oracle SQL 临时表)