知识大全 ORACLE临时表的应用
Posted 知
篇首语:既靠天,也靠地,还靠自己。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ORACLE临时表的应用相关的知识,希望对你有一定的参考价值。
ORACLE临时表的应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
前言
目前所有使用Oracle作为数据库支撑平台的应用 大部分数据量比较庞大的系统 即表的数据量一般情况下都是在百万级以上的数据量 当然在Oracle 中创建分区是一种不错的选择 但是当你发现你的应用有多张表关联的时候 并且这些表大部分都是比较庞大 而你关联的时候发现其中的某一张或者某几张表关联之后得到的结果集非常小并且查询得到这个结果集的速度非常快 那么这个时候我考虑在Oracle中创建 临时表
我对临时表的理解 在Oracle中创建一张表 这个表不用于其他的什么功能 主要用于自己的软件系统一些特有功能才用的 而当你用完之后表中的数据就没用了 Oracle的临时表创建之后基本不占用表空间 如果你没有指定临时表(包括临时表的索引)存放的表空的时候 你插入到临时表的数据是存放在 ORACLE系统的临时表空间中(TEMP)
临时表的创建
创建Oracle临时表 可以有两种类型的临时表 会话级的临时表和事务级的临时表
)会话级的临时表因为这这个临时表中的数据和你的当前会话有关系 当你当前SESSION不退出的情况下 临时表中的数据就还存在 而当你退出当前 SESSION的时候 临时表中的数据就全部没有了 当然这个时候你如果以另外一个SESSION登陆的时候是看不到另外一个SESSION中插入到临时表中的数据的 即两个不同的SESSION所插入的数据是互不相干的 当某一个SESSION退出之后临时表中的数据就被截断(truncate table 即数据清空)了 会话级的临时表创建方法 Create Global Temporary Table Table_Name(Col Type Col Type ……) On Commit Preserve Rows 举例create global temporary table Student(Stu_id Number( ) Class_id Number( ) Stu_Name Varchar ( ) Stu_Memo varchar ( )) on Commit Preserve Rows
)事务级临时表是指该临时表与事务相关 当进行事务提交或者事务回滚的时候 临时表中的数据将自行被截断 其他的内容和会话级的临时表的一致(包括退出 SESSION的时候 事务级的临时表也会被自动截断) 事务级临时表的创建方法 Create Global Temporary Table Table_Name(Col Type Col Type ……) On Commit Delete Rows 举例 create global temporary table Classes(Class_id Number( ) Class_Name Varchar ( ) Class_Memo varchar ( )) on Commit delete Rows
) 两种不通类型的临时表的区别 语法上 会话级临时表采用on mit preserve rows而事务级则采用on mit delete rows 用法上 会话级别只有当会话结束临时表中的数据才会被截断 而且事务级临时表则不管是mit rollback或者是会话结束 临时表中的数据都将被截断
例子
) 会话级(Session关闭掉之后数据就没有了 当Commit的时候则数据还在 当Rollback的时候则数据也是一样被回滚)
STU_ID CLASS_ID STU_NAME STU_MEMO 张三 福建 刘德华 福州 S H E 厦门 张惠妹 厦门
STU_ID CLASS_ID STU_NAME STU_MEMO 张三 福建 刘德华 福州 S H E 厦门 张惠妹 厦门
STU_ID CLASS_ID STU_NAME STU_MEMO 张三 福建 刘德华 福州 S H E 厦门 张惠妹 厦门 张惠妹 厦门
STU_ID CLASS_ID STU_NAME STU_MEMO 张三 福建 刘德华 福州 S H E 厦门 张惠妹 厦门 SQL>
) 事务级(Commit之后就删除数据) 本例子将采用以下的数据
insert into classes(Class_id Class_Name Class_Memo) values( 计算机 ); insert into classes(Class_id Class_Name Class_Memo) values( 经济信息 ); insert into classes(Class_id Class_Name Class_Memo) values( 经济信息 );
在一个SESSION中(比如SQLPLUS登陆)插入上面 条记录 然后再以另外一个SESSION(用SQLPLUS再登陆一次)登陆 当你 select * from classes 的时候 classes表是空的 而你再第一次登陆的SQLPLUS中select的时候可以查询到 这个时候你没有进行mit或者rollback之前你可以对刚才插入的 条记录进行update delete等操作 当你进行mit或者rollback的时候 这个时候由于你的表是事务级的临时表 那么在插入数据的session也看不到数据了 这个时候数据就已经被截断了
运行结果如下
CLASS_ID CLASS_NAME CLASS_MEMO 计算机 经济信息 经济信息 SQL> delete from classes where class_id= ; row deleted SQL> select * from classes ; CLASS_ID CLASS_NAME CLASS_MEMO 计算机 经济信息 SQL> mit; Commit plete SQL> select *from classes ; CLASS_ID CLASS_NAME CLASS_MEMO SQL> 再重复插入一次 然后rollback SQL> Rollback ; Rollback plete SQL> select * from classes ; CLASS_ID CLASS_NAME CLASS_MEMO SQL>
临时表的应用
) 当某一个SQL语句关联的表在 张及以上 并且和一些小表关联 可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中
) 程序执行过程中可能需要存放一些临时的数据 这些数据在整个程序的会话过程中都需要用的等等
注意事项
) 临时表的索引以及对表的修改 删除等和正常的表是一致的
) Oracle的临时表是Oracle i才支持的功能特性 如果你的Oracle版本比较低的话 那么就可能没有办法用到了 如果你的Oracle 版本是 i的话 你还需要把$ORACLE_HOME/admin/$ORACLE_SID/pfile目录下的init< ORACLE_SID> ora初始参数配置文件的patible修改为patible = 我的服务器上就是这样子配置的 当然也可以修改为patible =
cha138/Article/program/Oracle/201311/16578相关参考
Oracle单表的复杂查询 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracle单表的复杂
Oracle外部表的局限性 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracle外部表用起
Oracle两张表的数据比较 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在某些情况下我们会需
更改Oracle数据库表的表空间 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在Oracle数
Oracle用户权限表的管理方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我们将通过介绍命
对ORACLE的外部表的简单介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! External
浅谈Oracle中大数据量表的管理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 简介 随着信
详解Oracle数据库中DUAL表的使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! DUAL
子查询目标 子查询是一种把查询的结果作为参数返回给另一个查询的一种查询 子查询可以让你将多个查询绑定在一起 嵌套子查询 多层子查询 相关子查询 可接受外部的引用 exists/any
ORACLE临时表空间的清理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ORACLE临时表空