一、临时表的介绍:

Oracle的临时表只存在于某个会话或者事物的生命周期里,此时临时表中的数据只对当前这个会话可见。

临时表经常被用于存放一个操作的中间数据(数据处理的中间环节)。

临时表由于不产生redo,能够提高数据操作的性能。

二、临时表的创建:

创建Oracle临时表,可以用两种类型的临时表:

a、会话级的临时表

b、事务级的临时表

2.1、会话级的临时表因为这个临时表中的数据和你的当前会话有关系,当你当前SESSION不退出的情况下,临时表中的数据就还存在,而当你退出当前SESSION的时候,临时表中的数据就全部没有了,当然这个时候你如果以另外一个SESSION登陆的时候是看不到另外一个SESSION中插入到临时表中的数据的。即两个不同的SESSION所插入的数据是互不相干的。当某一个SESSION退出之后临时表中的数据就被截断(truncate table,即数据清空)了。会话级的临时表的创建方法:

 ----创建会话级临时表jack_tmp_session---- 1 SQL> create global temporary table jack_tmp_session on commit preserve rows as select  * from dba_objects where 1=2;
 2
 3 表已创建。
 4
 5 SQL> select table_name,temporary,duration,tablespace_name from user_tables  where table_name='JACK_TMP_SESSION';
 6
 7 TABLE_NAME               T DURATION            TABLESPACE_NAME
 8 ------------------------------ - ------------------------------ ------------------------------
 9 JACK_TMP_SESSION           Y SYS$SESSION
10
11 SQL> select count(*) from JACK_TMP_SESSION;
12
13   COUNT(*)
14 ----------
15      0
16
17 SQL> select sid from v$mystat where rownum=1;
18
19        SID
20 ----------
21     38
22 ----往表里面插入一下数据,并且执行commit,发现数据没有丢失----23 SQL> insert into JACK_TMP_SESSION select * from dba_objects;
24
25 已创建72511行。
26
27 SQL> select count(*) from JACK_TMP_SESSION;
28
29   COUNT(*)
30 ----------
31      72511
32
33 SQL> commit;
34
35 提交完成。
36
37 SQL> select count(*) from JACK_TMP_SESSION;
38
39   COUNT(*)
40 ----------
41      72511
42 ----从另外一个SESSION中查询JACK_TMP_SESSION表,发现没有数据,说明两个不同的SESSION所插入的数据是互不相干的----43 SQL> select sid from v$mystat where rownum=1;
44
45        SID
46 ----------
47     26
48
49 SQL> select count(*) from JACK_TMP_SESSION;
50
51   COUNT(*)
52 ----------
53      0
54 ----从SESSION38中退出SQLPLUS,再进去,发现数据没有了----55 SQL> exit;
56 从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
57 With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
58 [oracle@rhel5 ~]$ ./rlwrap
59
60 SQL*Plus: Release 11.2.0.1.0 Production on 星期三 11月 13 14:59:28 2013
61
62 Copyright (c) 1982, 2009, Oracle.  All rights reserved.
63
64 SQL> conn echo/echo
65 已连接。
66 SQL> select count(*) from JACK_TMP_SESSION;
67
68   COUNT(*)
69 ----------
70      0

2.2、事务级临时表是指该临时表
    事务级临时表是指临时表与事务相关,当进行事务提交或者事务回滚的时候,临时表中的数据将自行被截断,其他的内容和会话级的临时表一致(包括退出SESSION的时候,事务级临时表也会被自动截断)。事务级临时表的创建方法:

 1 SQL> create global temporary table jack_tmp_transaction on commit delete rows as select * from dba_objects where 1=2;
 2
 3 表已创建。
 4
 5 SQL> set linesize 200;
 6 SQL> select table_name, temporary, DURATION from user_tables  where table_name='JACK_TMP_TRANSACTION';
 7
 8 TABLE_NAME               T DURATION
 9 ------------------------------ - ------------------------------
10 JACK_TMP_TRANSACTION           Y SYS$TRANSACTION
11
12 SQL> select count(*) from JACK_TMP_TRANSACTION;
13
14   COUNT(*)
15 ----------
16      0
17
18 SQL> insert into JACK_TMP_TRANSACTION select * from dba_objects;
19
20 已创建72512行。
21
22 SQL> select count(*) from JACK_TMP_TRANSACTION;
23
24   COUNT(*)
25 ----------
26      72512
27
28 SQL> commit;
29
30 提交完成。
31
32 SQL> select count(*) from JACK_TMP_TRANSACTION;
33
34   COUNT(*)
35 ----------
36      0

2.3、两种类型临时表的区别
    会话级临时表采用on commit preserve rows;而事务级则采用on commit delete rows;用法上,会话级别只有当会话结束临时表中的数据才会被截断,而且事务级临时表则不管是commit、rollback或者是会话结束,临时表中的数据都将被截断。

2.4、什么时候使用临时表

1)、当某一个SQL语句关联的表在2张以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中;

2)、程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用的等等。

Oracle 临时表相关推荐

  1. oracle临时表性能,oracle临时表-优化查询速度

    目前所有使用oracle作为数据库支撑平台的应用,大部分数据量比较庞大的系统,即表的数据量一般情况下都是在百万级以上的数据量.[@more@] 当然在oracle中创建分区是一种不错的选择,但是当你发 ...

  2. Oracle临时表和SQL Server临时表的不同点对比

    文章来源:http://www.codesky.net/article/201109/141401.html 1.简介 Oracle数据库除了可以保存永久表外,还可以建立临时表temporary ta ...

  3. oracle 创建临时表报权限不足,ORACLE 临时表空间满了的原因解决方案

    临时表空间作用 Oracle临时表空间主要用来做查询和存放一些缓冲区数据.临时表空间消耗的主要原因是需要对查询的中间结果进行排序. 重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql ...

  4. oracle 临时表存在哪里_openGauss魔改PG?它能兼容Oracle的数据库表吗?

    作者介绍 洪烨,openGauss Contributor,多年银行业系统架构设计及DBA实战经验,<DB2数据库内部解析与性能调优>作者. openGauss的前世今生 上一篇看到很多朋 ...

  5. [转]oracle临时表相关知识

    回复: 临时表存放在哪儿? DML statements on temporary tables do not generate redo logs for the data changes. How ...

  6. Oracle - 临时表(GLOBAL TEMPORARY TABLE)

    http://aofengblog.blog.163.com/blog/static/6317021200951664351836/ Oracle - 临时表(GLOBAL TEMPORARY TAB ...

  7. oracle临时表的优点,详解Oracle临时表的几种用法和意义

    举例: create global temporary table Classes (Class_id Number(5), Class_Name Varchar2(8), Class_Memo va ...

  8. oracle 临时表空间的增删改查

    oracle 临时表空间的增删改查 1.查看临时表空间 (dba_temp_files视图)(v_$tempfile视图) select tablespace_name,file_name,bytes ...

  9. oracle临时表空间地址,Oracle认证:详解OracleTemp临时表空间处理方法

    临时表空间主要用途是在数据库进行排序运算.管理索引.访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理.当oracle里需要用到sort的时候,PGA中sort_area_size大小不 ...

  10. oracle 临时表空间语句,oracle的临时表空间

    经常看到有人说看到temporary tablespace空间不释放等等的问题,整理一篇metalink上的相关文章,入门级的,还算浅显吧.基本上就是翻译了. sort之后临时段不回收 描述 当你监控 ...

最新文章

  1. linux怎么运行conda,linux怎么用conda
  2. mac mtu测试_一个关于MTU的现象,请兄弟们看看是不是确实是这样。 - 网络管理论坛 - 51CTO技术论坛_中国领先的IT技术社区...
  3. windows11图文安装流程
  4. 微信公众平台前端开发技巧分享
  5. node n 切换node版本失败_记一次 node-sass@4.x 安装失败
  6. 单例-双重检查锁定与延迟初始化
  7. Python版——博客网站四 编写日志创建页
  8. InputStream中通过mark和reset方法重复利用缓存
  9. ADO.NET,浅显
  10. Snap 程序包管理器被爆Linux 提权漏洞
  11. 从甲骨文中国裁员说起
  12. msc用户无法登陆问题记录
  13. 马尔可夫链模型--通俗
  14. 一种基于GRU神经网络的英文诗歌生成系统
  15. linux洪水攻击路由器,(20)Linux下ICMP洪水攻击实例
  16. ES可视化工具--Dejavu--下载、安装、使用
  17. 杂谈|程序员还是工程师
  18. win10svn图标(绿色勾)不显示
  19. 转发:【论文精读】Human Semantic Parsing for Person Re-identification
  20. 自动驾驶的理想破灭?我看到的这些场景都是噩梦 | 分析

热门文章

  1. 顶级SaaS公司的共同基因都有什么?
  2. 2017-01-20_dp测试
  3. 广州有这么一个无聊的人
  4. OSPF 的六种 LSA类型
  5. 内存管理学习之内存寻址
  6. Android 网络服务类提供的服务接口
  7. Tensorflow基本语法和实现神经网络
  8. Linux内核中的PID散列表实例
  9. 中国生态系统服务空间数据集/食物生产、土壤保持、水源涵养、防风固沙、生物多样性、碳固定
  10. 将下图的nfa确定化为dfa_实战技术利用AutoCAD确定PCB板型