临时表

上一篇 / 下一篇  2007-05-12 00:00:00 / 个人分类:一般分类

临时表功能是从oracle 8i开始提供的。这可以使开发人员可以在自己的临时表空间中创建一些存储临时数据的对象。这些对象的生命周期可以是一个事务或者整个SESSION。下面是创建临时表的语法:
CREATE GLOBAL TEMPORARY TABLE tablename ( columns )
[ ON COMMIT PRESERVE | DELETE ROWS ]
当一个使用CTAScreate table as select)操作创建临时表的时候,马上在缺省的临时表空间创建一个临时段。如果不是使用CTAS创建的临时表,在第一次INSERT的时候,创建临时段。不同的SESSION可以使用名称相同的临时表,这些临时表在SESSION结束的时候或者事务提交或回滚的时候自动清除(取决于使用ON COMMIT RESERVE ROWS或者ON COMMIT DELETE ROWS选项)。临时表有以下的特点:
l
数据仅仅在生命周期内有效(SESSION或者事务)
l
只在SESSION或事务内部是可见的。不同的SESSION操作相同名称的临时表的时候,只能操作和本SESSION相关的数据l 临时表可以创建触发器、视图和索引
l
索引只能在临时表还没有数据的时候创建(在临时段还没有创建的时候创建),临时索引使用独立的临时段
l
在对临时表的数据进行操作的时候,生成UNDO,但是不生成REDO信息。因为UNDO会生成REDO,因此临时表操作间接产生REDO,可以用/*+append*/来减少日志。
l
临时表的定义可以被拥有权限的其他用户看到
l TRUNCATE
操作仅仅截断本SESSION相关的数据,对其它会话没有影响。
l
只能EXPORT或者IMPORT临时表的定义,而不能导入导出数据
l
临时表的定义不会自动删除
l
只有没有任何SESSION在使用该临时表的时候才能对其进行DDL操作
l
不能对临时表进行分析(GATHER STATISTICS),对临时表进行分析可能不会报错,但是不会采集任何数据
l
可以在临时表上创建列的约束条件,但是约束条件仅仅在SESSION或者事务级起作用,不同的SESSION的数据可以违背约束条件

-----------------------------------------------------------------

不知是谁写的了。

建立方法:


1) ON COMMIT DELETE ROWS
定义了建立事务级临时表的方法.


> CREATE GLOBAL TEMPORARY TABLE admin_work_area
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT DELETE ROWS;

2)ON COMMIT PRESERVE ROWS 定义了创建会话级临时表的方法.


CREATE GLOBAL TEMPORARY TABLE admin_work_area


(startdate DATE,


enddate DATE,


class CHAR(20))


ON COMMIT PRESERVE ROWS;



TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar