临时表是阶段性的保存数据.
创建会话内保留行的临时表
>conn scott/tiger
>create global temporary table tmp1
on commit preserve rows
as select * from emp;
>select * from emp; 可以看到有记录数据
>disconn
>conn scott/tiger
>select * from tmp1; 从新连接就没有数据了.
tmp1是会话级的临时表,在一个会话期间内,表的数据是存在的,存在于排序段,每个会话是隔离的,也就是说每个会话只能看到自己的数据,就是是提交了,别的会话也看不到.因为临时表存在于临时段中,而排序段是会话所专有的.每个会话只能看到自己的数据.
当我们有多个会话在同时使用临时表的时候,我们会发现有多个排序段在活动.每个会话只是使用临时表在系统表空间中的定义,所以我们drop表的时候不会去回收站,而是直接从字典中删除.
创建事物内保存行的临时表
>drop table tmp2;
>create global temporary table tmp2
as select * from emp;
>select * from tmp2; 没有数据
>insert into tmp2 select * from emp;
>select * from tmp2; 没有数据
>commit;
>select * from tmp2; 没有数据
tmp2是事物级的表,当事物结束的时候表的数据会自动的删除.
阅读(648) | 评论(0) | 转发(0) |