Oracle两种临时表的创建与使用详解

摘要:
除了存储永久表外,ORACLE数据库还可以创建临时表。当会话退出或用户提交提交和回滚事务时,临时表中的数据会自动清除,但临时表的结构和元数据也会存储在用户的数据字典中。分类:1.会话级临时表会话级临时表格是指临时表格中的数据只存在于会话生命周期中。当用户退出会话时,Oracle会自动清除临时表中的数据。格式:CreateGlobalTemporaryTableTable_ NameOnCommitPreserveRows;2.事务级临时表事务级临时表格是指临时表格中的数据只存在于事务生命周期中。

ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables。这些临时表用来保存一个会话SESSION的数据,或者保存在一个事务中需要的数据。当会话退出或者用户提交commit和回滚rollback事务的时候,临时表的数据自动清空,但是临时表的结构以及元数据还存储在用户的数据字典中。

分类:
1.会话级临时表

会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据。

格式:

Create Global Temporary Table Table_Name
(
Col1 Type1,
Col2 Type2
...
)
On Commit Preserve Rows;

2.事务级临时表
事务级临时表是指临时表中的数据只在事务生命周期中存在。

Create Global Temporary Table Table_Name
(
Col1 Type1,
Col2 Type2
...
)
On Commit Delete Rows;

当一个事务结束(commit or rollback),Oracle自动清除临时表中数据。

下面在Oracle 10g中演示了临时表的创建与使用:

1.创建事务级临时表,插入一条数据,并查询:

create global temporary table transaction_temp_tb (col1 varchar(20)) on commit delete rows;
insert into  transaction_temp_tb values('test');
select * from  transaction_temp_tb;

Oracle两种临时表的创建与使用详解第1张

 2.执行commit或者rollback操作,临时表内数据就被清空,但表结构依然存在:

Oracle两种临时表的创建与使用详解第2张

 3.创建一个会话级临时表,插入一条数据,并查询:

create global temporary table session_temp_tb (col1 varchar(20)) on commit preserve rows;
insert into session_temp_tb values('test');
select * from session_temp_tb;

Oracle两种临时表的创建与使用详解第3张

 4..执行commit或者rollback操作,表内数据依然存在,新建一个命令窗口(相当于开启了一个新的会话),表内的数据就查询不到了:

Oracle两种临时表的创建与使用详解第4张

 5.如果创建会话临时表的会话没有结束,则无法删除此临时表,因为临时表,还在使用之中,但是结束会话(关闭创建会话级临时表的命令窗口)后就可以删除了:

Oracle两种临时表的创建与使用详解第5张

 Oracle两种临时表的创建与使用详解第6张

免责声明:文章转载自《Oracle两种临时表的创建与使用详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇HTML不同按钮的点击效果不同(创)Linux 下svn恢复到某一版本下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL Server 锁

from:http://www.cnblogs.com/kissdodog/p/3170036.html  锁是一种防止在某对象执行动作的一个进程与已在该对象上执行的其他进行相冲突的机制。也就是说,如果有其他人在操作某个对象,那么你旧不能在该对象上进行操作。你能否执行操作取决于其他用户正在进行的操作。 通过锁可以防止的问题   锁可以解决以下4种主要问题:...

数据库SQL优化大总结之 百万级数据库优化方案(转)

转载来源:http://www.cnblogs.com/yunfeifei/p/3850440.html#3571275 今天无意中看到的这篇文章,觉得对自己非常有帮助。凡是写代码的人,一般都要接触数据库,虽然不见得会接触到百万级的数据库,但了解一下总归是有好处的。 写到自己的博客也是为了加深印象,另外以后如果真的需要了也方便查看。 1、对查询进行优化,要...

SqlServer查看锁表与解锁

锁定数据库的一个表 SELECT * FROM table WITH (HOLDLOCK)  注意: 锁定数据库的一个表的区别 SELECT * FROM table WITH (HOLDLOCK)  其他事务可以读取表,但不能更新删除 SELECT * FROM table WITH (TABLOCKX)  其他事务不能读取表,更新和删除 SELECT...

MySQL-添加索引或字段时如何不锁表

索引的添加MySQL经历了一下几个历程: 一 .在MySQL 5.5版本之前,添加索引具体是这样的: 1.首先创建一张临时表和原表数据结构相同,将你要添加的索引加上。 2.把原表数据导入临时表。 3.删除原表。 4.将临时表重命名为原表。 这样做有很大问题: 首先对于大数据量的导入需要很长的时间,那么在这段时间里新增或修改的数据没办法处理。 其次如果碰上大...

SQL Server连接Oracle详细步骤

http://blog.csdn.net/weiwenhp/article/details/8093105 我们知道SQL Server和Oracle其实很多原理都类似.特别是一些常用的SQL语句都是按照标准来.所以它们也可以有一定的互操作性的.这里讲一下,怎么配置让SQL Server连接一个Oracle.然后你在SQL Server中也能查看Oracl...

Mysql面对高并发修改的问题处理【2】

一、线上修改表结构有哪些风险? 如果有一天业务系统需要增大一个字段长度,能否在线上直接修改呢?在回答这个问题前,我们先来看一个案例: 以上语句尝试修改user表的name字段长度,语句被阻塞。按照惯例,我们检查一下当前进程: 从进程可以看出alter语句在等待一个元数据锁,而这个元数据锁很可能是上面这条select语句引起的,事实正是如此。在执行DML...