建立临时表之前要判断临时表是否存在,可以用 begin sql_word := 'drop table '||TEMP_A ; EXECUTE IMMEDIATE sql_word; exception when others then null; end; 然后建表 1、create table TEMP_A as select A 2、create table TEMP_B as select B 3、create table TEMP_C as select * from ( select * from TEMP_A union all select * from TEMP_B )
根据实际情况建立基于commit或者session的临时表,参照2楼语句。
ORACLE 中的临时表要提前创建完成,用的时候,只要 inset into 就可以了,你这个情况要建 3 张临时表。
临时表分为SESSION、TRANSACTION两种,SESSION级的临时表数据在整个SESSION都存在,直到结束此次SESSION;而TRANSACTION级的临时表数据在TRANACTION结束后消失,即COMMIT/ROLLBACK或结束SESSION都会清除TRANACTION临时表数据。
两种临时表的语法:
create global temporary table 临时表名 on commit preserve|delete rows 用preserve时就是SESSION级的临时表,用delete就是TRANSACTION级的临时表 一、SESSION级临时表
1、建立临时表
Sql代码 收藏代码
create global temporary table temp_tbl(col_a varchar2(30))
on commit preserve rows 2、插入数据
Sql代码 收藏代码
insert into temp_tbl values('test session table') 3、提交commit;
4、查询数据
Sql代码 收藏代码
select *from temp_tbl 可以看到数据'test session table'记录还在。
结束SESSION,重新登录,再查询数据select *from temp_tbl,这时候记录已不存在,因为系统在结束SESSION时自动清除记录
二、TRANSACTION级临时表
1、建立临时表
Sql代码 收藏代码
create global temporary table temp_tbl(col_a varchar2(30))
on commit delete rows 2、插入数据
Sql代码 收藏代码
insert into temp_tbl values('test transaction table') 3、提交
commit
4、查询数据
Sql代码 收藏代码
select *from temp_tbl 这时候可以看到刚才插入的记录'test transaction table'已不存在了;同样,如果不提交而直接结束SESSION,重新登录记录也不存在
begin
sql_word := 'drop table '||TEMP_A ;
EXECUTE IMMEDIATE sql_word;
exception when others then
null;
end;
然后建表
1、create table TEMP_A as select A
2、create table TEMP_B as select B
3、create table TEMP_C as select * from (
select * from TEMP_A
union all
select * from TEMP_B
)