Chinaunix首页 | 论坛 | 博客
  • 博客访问: 229539
  • 博文数量: 57
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 674
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-30 22:48
个人简介

2014,换个角度,希望接下来的事情值得期待。

文章分类

全部博文(57)

文章存档

2015年(1)

2014年(55)

2013年(1)

我的朋友

分类: Oracle

2014-01-10 16:30:27

1.概念特性
临时表用来保存一个会话SESSION或一个事务中需要的数据。当会话退出或事务结束时,临时表的数据自动清空,但是表结构及元数据
依旧会存储在用户的数据字典中。

临时表不是存放于用户表空间,而是存入于指定的临时表空间中,没有指定临时表(包括其索引)存入的表空间的时间,临时表的数据则
存放于系统的临时表空间中(TEMP)。

临时表上可以创建索引,视图和触发器,可以用EXPORT 和 IMPORT 工具导入和导出表的定义,但是不能导出数据,表的定义对所有的会话可见。
建立在临时表的索引也是临时的,也只对当前会话或事务有效。

对临时表的DML操作速度相对较快,但是也要产生Redo log,只是同样的DML,比对PERMANENT的DML产生的Redo log相对要少。
2.临时表的缺陷:
1.不支持LOB对象。
2.不支持主外键关系
3.应用场景
1.比如购物网站,在整个SESSION中保存购物车信息。采用(ON COMMIT PRESERVE ROWS)的方法解决。
2.存储中间数据。比如数据分析应用。


4.会话临时表(session级别):
SQL> create global temporary table test(id number) on commit preserve rows;
 
Table created
 
SQL> select * from test;
 
        ID
----------
 
SQL> insert into test(1);
 
insert into test(1)
 
ORA-00928: 缺失 SELECT 关键字
 
SQL> insert into test values(1);
 
1 row inserted
 
SQL> commit;
 
Commit complete
 
SQL> select * from test;
 
        ID
----------
         1
 
SQL> insert into test values(2);
 
1 row inserted
 
SQL> select * from test;
 
        ID
----------
         1
         2
 
SQL> rollback ;
 
Rollback complete
 
SQL> select * from test;
 
        ID
----------
         1


5.事务临时表
SQL> drop table test;
 
Table dropped


如删除不掉,请重新登录,再删除。
 
SQL> create global temporary table test(id number) on commit delete rows;
 
Table created
 
SQL> insert into test values(1);
 
1 row inserted
 
SQL> commit;
 
Commit complete
 
SQL> select * from test;
 
        ID
----------
阅读(1419) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~