`

临时表初步认识(转)

 
阅读更多

 目前所有使用Oracle作为数据库支撑平台的应用,大部分数据量比较庞大的系统,即表的数据量一般情况下都是在百万级以上的数据量。当然在Oracle 中创建分区是一种不错的选择,但是当你发现你的应用有多张表关联的时候,并且这些表大部分都是比较庞大,而你关联的时候发现其中的某一张或者某几张表关联之后得到的结果集非常小并且查询得到这个结果集的速度非常快,那么这个时候我考虑在Oracle中创建“临时表”。
  我对临时表的理解:在Oracle中创建一张表,这个表不用于其他的什么功能,主要用于自己的软件系统一些特有功能才用的,而当你用完之后表中的数据就没用了。Oracle的临时表创建之后基本不占用表空间,如果你没有指定临时表(包括临时表的索引)存放的表空的时候,你插入到临时表的数据是存放在 ORACLE系统的临时表空间中(TEMP)。

  2、临时表的创建

  创建Oracle临时表,可以有两种类型的临时表:会话级的临时表和事务级的临时表。
  1)会话级的临时表因为这这个临时表中的数据和你的当前会话有关系,当你当前SESSION不退出的情况下,临时表中的数据就还存在,而当你退出当前 SESSION的时候,临时表中的数据就全部没有了,当然这个时候你如果以另外一个SESSION登陆的时候是看不到另外一个SESSION中插入到临时表中的数据的。即两个不同的SESSION所插入的数据是互不相干的。当某一个SESSION退出之后临时表中的数据就被截断(truncate table,即数据清空)了。会话级的临时表创建方法:Create Global Temporary Table Table_Name(Col1 Type1,Col2 Type2……) OnCommitPreserveRows;举例create global temporary table Student(Stu_id Number(5),Class_id Number(5),Stu_Name Varchar2(8),Stu_Memo varchar2(200)) onCommitPreserveRows
  2)事务级临时表是指该临时表与事务相关,当进行事务提交或者事务回滚的时候,临时表中的数据将自行被截断,其他的内容和会话级的临时表的一致(包括退出 SESSION的时候,事务级的临时表也会被自动截断)。事务级临时表的创建方法:Create Global Temporary Table Table_Name(Col1 Type1,Col2 Type2……) OnCommit Delete Rows;举例:create global temporary table Classes(Class_id Number(5),Class_Name Varchar2(8),Class_Memo varchar2(200)) onCommit delete Rows
  3)、两种不通类型的临时表的区别:语法上,会话级临时表采用oncommitpreserverows而事务级则采用oncommit delete rows;用法上,会话级别只有当会话结束临时表中的数据才会被截断,而且事务级临时表则不管是commit、rollback或者是会话结束,临时表中的数据都将被截断。

  3、例子:

  1)、会话级(Session关闭掉之后数据就没有了,当Commit的时候则数据还在,当Rollback的时候则数据也是一样被回滚):

insert into student(stu_id,class_id,stu_name,stu_memo) values(1,1,''张三'',''福建''); insert into student(stu_id,class_id,stu_name,stu_memo) values(2,1,''刘德华'',''福州''); insert into student(stu_id,class_id,stu_name,stu_memo) values(3,2,''S.H.E'',''厦门''); SQL> select *from student ;

 

STU_ID CLASS_ID STU_NAME STU_MEMO ------ -------- -------- ------------------------1 1 张三 福建2 1 刘德华 福州3 2 S.H.E 厦门 4 2 张惠妹 厦门

SQL> commit; Commit complete SQL> select * from student ;

 

STU_ID CLASS_ID STU_NAME STU_MEMO ------ -------- -------- --------------------1 1 张三 福建2 1 刘德华 福州3 2 S.H.E 厦门 4 2 张惠妹 厦门

SQL>insert into student(stu_id,class_id,stu_name,stu_memo) values(4,2,''张惠妹'',''厦门''); 1 row inserted SQL> select * from student ;

 

STU_ID CLASS_ID STU_NAME STU_MEMO ------ -------- -------- ------------------1 1 张三 福建2 1 刘德华 福州3 2 S.H.E 厦门 4 2 张惠妹 厦门 4 2 张惠妹 厦门

SQL> rollback ; Rollback complete SQL> select * from student ;

 

STU_ID CLASS_ID STU_NAME STU_MEMO ------ -------- -------- -------------------1 1 张三 福建2 1 刘德华 福州3 2 S.H.E 厦门 4 2 张惠妹 厦门 SQL>

  2)、事务级(Commit之后就删除数据):本例子将采用以下的数据:

 

insert into classes(Class_id,Class_Name,Class_Memo) values(1,''计算机'',''9608''); insert into classes(Class_id,Class_Name,Class_Memo) values(2,''经济信息'',''9602''); insert into classes(Class_id,Class_Name,Class_Memo) values(3,''经济信息'',''9603'');

  在一个SESSION中(比如SQLPLUS登陆)插入上面3条记录,然后再以另外一个SESSION(用SQLPLUS再登陆一次)登陆,当你 select * from classes;的时候,classes表是空的,而你再第一次登陆的SQLPLUS中select的时候可以查询到,这个时候你没有进行commit或者rollback之前你可以对刚才插入的3条记录进行update、delete等操作,当你进行commit或者rollback的时候,这个时候由于你的表是事务级的临时表,那么在插入数据的session也看不到数据了,这个时候数据就已经被截断了。

  运行结果如下:

SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(1,''计算机'',''9608''); 1 row inserted SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(2,''经济信息'',''9602''); 1 row inserted SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(3,''经济信息'',''9603''); 1 row inserted SQL> update classes set class_memo ='''' where class_id=3 ; 1 row updated SQL> select * from classes ;

 

CLASS_ID CLASS_NAME CLASS_MEMO -------- ---------- -------------------1 计算机 96082 经济信息 96023 经济信息 SQL> delete from classes where class_id=3 ;1 row deleted SQL> select * from classes ;CLASS_ID CLASS_NAME CLASS_MEMO -------- ---------- -----------1 计算机 96082 经济信息 9602SQL> commit; Commit completeSQL> select *from classes ; CLASS_ID CLASS_NAME CLASS_MEMO-------- ---------- -------------SQL> 再重复插入一次,然后rollback。SQL> Rollback ;Rollback complete SQL> select * from classes ;CLASS_ID CLASS_NAME CLASS_MEMO -------- ---------- ----------- SQL>

  4、临时表的应用
  1)、当某一个SQL语句关联的表在2张及以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中。
  2)、程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用的等等。

  5、注意事项:
  1)、临时表的索引以及对表的修改、删除等和正常的表是一致的。
  2)、Oracle的临时表是Oracle8i才支持的功能特性,如果你的Oracle版本比较低的话,那么就可能没有办法用到了,如果你的Oracle 版本是8i的话,你还需要把$ORACLE_HOME/admin/${ORACLE_SID}/pfile目录下的init< ORACLE_SID>.ora初始参数配置文件的compatible修改为compatible = "8.1.0",我的服务器上就是这样子配置的。当然也可以修改为compatible = "8.1.6"

 

本文转自http://hi.baidu.com/ayenglish/blog/item/228f3480bede28cabd3e1e7c.html

分享到:
评论

相关推荐

    SQL server数据库总结文档

    - **Tempdb数据库**:全局临时工作区,存储临时表和临时存储过程,每次服务器启动时都会自动创建和初始化。 - **Model数据库**:作为新创建数据库的模板,其结构和内容将被复制。 - **其他系统数据库**:包括...

    建筑设计企业临时采购申请单.doc

    2. **申请人**:申请人的信息显示了是谁需要这项物品,可能是项目负责人、设计师或者工程师等,他们对项目的具体需求有最直接的认识。 3. **日期**:记录申请的时间对于掌握采购的紧迫性和与项目进度的关系至关重要...

    会计实习周记..pdf

    通过这四周的实习,实习生对会计岗位的基本职责和企业税务流程有了初步认识,同时也意识到自身的不足,明确了未来需要提升的方向,如深化会计分录理解、熟悉税务申报流程和加强税法知识的学习。这种实习经历不仅提供...

    6、60平复式全包预算表.xls2.zip

    通过这份预算表,业主可以清楚地看到每一项工程的单价、数量和总价,从而对总预算有明确的认识。在使用模板时,可以根据自己的需求调整项目和材料,对比不同报价,选择性价比最高的方案。 在实际操作中,业主应充分...

    数据-行业数据-23、100平米全包预算表建筑施工模板.rar

    通过这个预算表,项目经理可以对项目的整体成本有清晰的认识,从而更好地进行成本控制,预防超支。同时,业主也可以据此评估项目是否符合预算,是否需要调整设计方案或寻找更经济的材料。在实际操作中,预算表会随着...

    小书架wyy.ppt

    2. **认识“上、中、下”的位置概念**:这是对空间方位的初步认知,对于孩子的日常生活和后续学习有着重要作用。课程中通过小书架的例子,让孩子们理解不同层次的位置关系。 3. **学习书写汉字**:课程要求学生学会...

    强昌金-揭秘MySQL OCP,全面掌握MySQL技术的最佳途径

    分析问题的思路不仅包括了对操作系统和MySQL自身的监控和分析,还涉及到了SQL优化,例如如何分析慢查询日志,以及通过SHOW STATUS获取表锁定等待时间、发送数据、复制到临时表和创建排序索引等状态信息来诊断问题。...

    人教版小学数学五年级下册期末试题(30份).zip

    - 数与代数:包括整数、小数的加减乘除,以及简单的方程解法,例如分数的初步认识,小数的四则运算等。 - 形状与空间:涉及到平面图形的基本性质,如周长、面积的计算,以及立体图形的认识,如长方体、正方体的表...

    DB2 V8数据库基础

    8. **高可用性与复制**:理解DB2 V8的高可用性解决方案,如纯镜像、数据库分区、全局临时表和数据复制技术。这些特性有助于实现故障切换和数据同步,提高服务的连续性。 9. **故障诊断与问题解决**:学习如何使用DB...

    小班主题活动 墙上也有一个我.doc

    教室环境布置方面,将设立互动墙饰,如《我的风车转转转》《我跟爸爸妈妈》《我在这里》,这些墙饰既有助于营造亲切的家庭氛围,也能让孩子看到自己和家人的存在,增强归属感。 主题知识网覆盖了健康、语言、社会、...

    工程施工组织设计方案内部审批表.doc

    1. **工程概述**:明确工程的基本信息,如工程名称、地点、规模、目标等,以便所有参与者对项目有清晰的认识。 2. **施工方案**:由【吴敦松】编制的施工方案,这是施工组织设计的核心,详细规定了施工工艺、技术...

    五年级语文下册 人物描写一组 2教案 人教新课标版.doc

    首先,课程开始时,教师引导学生回顾之前读过的故事,唤起他们对印象深刻人物的记忆,并通过朗读课文,初步认识生字和理解内容。学生在默读过程中,被鼓励寻找触动自己的段落,分享阅读感受,对人物进行评价,如...

    实验七 简单SELECT语句

    2. **了解SELECT语句**:对简单SELECT语句有初步认识。 3. **熟悉SQL环境**:能够较熟练地在查询分析器中编写与运行SQL脚本。 实验要求明确,参与者必须完成指定的简单查询和连接查询任务,验证查询结果的有效性,...

    小学信息技术走进计算机PPT课件.pptx

    《小学信息技术:走进计算机》是一份专为小学生设计的信息技术课件,旨在引导学生初步了解计算机的基本知识和操作。这份课件通过互动的形式,激发孩子们对计算机的兴趣,并帮助他们建立起对计算机基本组成部分的认识...

    部编版道德与法治六年级上册《2学会宽容》教学反思(两篇).pdf

    通过故事启迪方式,引发学生对宽容的思考,引导学生初步认识宽容的重要作用。接着,通过"青蛙跳水"的活动,让学生体验宽容,知道宽容就是原谅和不计较他人,学会换位思考,宽容别人。 在教学过程中,教师需要时刻...

    oracledbbestpracticesforadatawarehouse

    建议将日志文件、临时表空间和数据文件分开存储于不同的物理磁盘上,以避免I/O竞争。此外,采用RAID 5或RAID 6等冗余方案可以提供更好的容错能力和读写性能。 #### 逻辑模型 逻辑数据模型定义了数据结构及其关系,...

    济南版七年级(上册)生物知识点24504.doc

    【济南版七年级(上册)生物知识点概览】 ...这些基础知识是七年级学生学习生物学的基础,通过理解和掌握这些概念,可以帮助学生建立对生物世界的初步认识,并为后续更深入的生物学学习打下坚实基础。

    人力资源实习总结.docx

    - **初步面试**:接听求职者的来电,进行简单的初次筛选,通过初步筛选的候选人转交给部门经理进行进一步面试。 - **试工安排**:为通过复试的候选人开具试工单,并做好相关的记录。 #### 2. 员工培训支持 - **入职...

Global site tag (gtag.js) - Google Analytics