`

临时表初步认识(转)

 
阅读更多

 目前所有使用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

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

    消防演练 应急情况演习记录表.doc

    通过模拟真实火灾发生时的情境,员工能够更加直观地认识到紧急情况下的应对步骤,从而加深记忆并有效提高应对火灾的实际操作能力。 预演的安排是演习成功与否的关键因素之一。演习设计的情景通常基于工作场所的实际...

    Oracle优化与调整详细

    - **临时表空间设计规划**:根据应用需求规划临时表空间的大小和数量,以满足临时数据的存储需求。 - **数据文件和日志文件分离**:将数据文件和日志文件存放在不同的物理磁盘上,可以有效提高I/O效率。 - **迁移到...

    2021年非接触式物位仪表行业工程防管道吊装作业以及吊装机械设备倾覆事故应急预案.pdf

    现场临时医疗组则为受伤人员提供初步医疗救助。这些小组在事故发生的第一时间就能迅速反应,确保了救援工作的高效性。 管道吊装作业管理制度在这一背景下显得尤为重要,它强调了"安全第一、预防为主、综合治理"的...

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

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

    (新人教版)吉林省前郭尔罗斯蒙古族自治县七年级生物下册4.4.4输血与血型课件.ppt

    通过学习这些知识,学生们可以为将来成为负责任的公民打下基础,乃至对将来在医学、生物学等领域的深入研究奠定初步的认识和兴趣。 综上所述,课件“(新人教版)吉林省前郭尔罗斯蒙古族自治县七年级生物下册4.4.4...

    小书架wyy.ppt

    课程的核心目标涵盖了朗读课文、认识位置概念和学习书写汉字三个方面。首先,朗读课文能够训练孩子的语言表达能力,帮助他们正确、流利地朗读,这是语言学习的基础。通过反复的朗读练习,学生不仅能够提高语音识别和...

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

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

    DB2 V8数据库基础

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

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

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

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

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

    实验七 简单SELECT语句

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

    幼儿园教案2021-中班语言:下雨了.doc

    在这个过程中,孩子们不仅学会了如何描述图片中的情景,还复习了之前已经学习的汉字,例如“蘑菇”可以用来当伞,“芭蕉”叶可以遮雨,“荷叶”也可以用来遮挡雨水,而“手帕”则可以临时用来折成一个小伞。...

    幼儿园消防安全课件(ppt).ppt

    同时,教授孩子们利用床单、被套制作临时逃生绳等紧急逃生技巧,以及在高层建筑中如何发出求救信号,这些技能在火灾中至关重要。 四、消防工具的认识 让孩子们认识到消防工具的作用同样重要。通过课件介绍灭火器等...

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

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

Global site tag (gtag.js) - Google Analytics