ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Temporary Tables临时表(转)

Temporary Tables临时表(转)

原创 Linux操作系统 作者:xukang442 时间:2013-08-11 16:19:38 0 删除 编辑
Temporary Tables临时表
1简介
   ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables。这些临时表用来保存一个会话SESSION的数据,
   或者保存在一个事务中需要的数据。当会话退出或者用户提交commit和回滚rollback事务的时候,临时表的数据自动清空,
   但是临时表的结构以及元数据还存储在用户的数据字典中。
   临时表只在oracle8i以及以上产品中支持。
2详细介绍
   Oracle临时表分为 会话级临时表 和 事务级临时表。
会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据。
事务级临时表是指临时表中的数据只在事务生命周期中存在。当一个事务结束(commit or rollback),Oracle自动清除临时表中数据。
临时表中的数据只对当前Session有效,每个Session都有自己的临时数据,并且不能访问其它Session的临时表中的数据。因此,
临时表不需要DML锁.当一个会话结束(用户正常退出 用户不正常退出 ORACLE实例崩溃)或者一个事务结束的时候,Oracle对这个会话的
表执行 TRUNCATE 语句清空临时表数据.但不会清空其它会话临时表中的数据.
你可以索引临时表和在临时表基础上建立视图.同样,建立在临时表上的索引也是临时的,也是只对当前会话或者事务有效.  
临时表可以拥有触发器.
3建立临时表
   临时表的定义对所有会话SESSION都是可见的,但是表中的数据只对当前的会话或者事务有效.
   建立方法:
1) ON COMMIT DELETE ROWS 定义了建立事务级临时表的方法.
CREATE GLOBAL TEMPORARY TABLE admin_work_area
        (startdate DATE,
         enddate DATE,
         class CHAR(20))
      ON COMMIT DELETE ROWS;
EXAMPLE:
SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area
  2          (startdate DATE,
  3           enddate DATE,
  4           class CHAR(20))
  5        ON COMMIT DELETE ROWS;
SQL> create table permernate( a number);
SQL> insert into admin_work_area values(sysdate,sysdate,'temperary table');
SQL> insert into permernate values(1);
SQL> commit;
SQL> select * from admin_work_area;
SQL> select  * from permernate;
A
1
2)ON COMMIT PRESERVE ROWS 定义了创建会话级临时表的方法.
CREATE GLOBAL TEMPORARY TABLE admin_work_area
        (startdate DATE,
         enddate DATE,
         class CHAR(20))
     ON COMMIT PRESERVE ROWS;
EXAMPLE:

会话1:
SQL> drop table admin_work_area;
SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area
  2          (startdate DATE,
  3           enddate DATE,
  4           class CHAR(20))
  5       ON COMMIT PRESERVE ROWS;
SQL> insert into permernate values(2);
SQL> insert into admin_work_area values(sysdate,sysdate,'session temperary');
SQL> commit;
SQL> select * from permernate;

         A
----------
         1
         2

SQL> select * from admin_work_area;

STARTDATE  ENDDATE    CLASS
---------- ---------- --------------------
17-1?? -03 17-1?? -03 session temperary

会话2:

SQL> select * from permernate;

         A
----------
         1
         2

SQL> select * from admin_work_area;

未选择行.

会话2看不见会话1中临时表的数据.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12725924/viewspace-768238/,如需转载,请注明出处,否则将追究法律责任。

上一篇: Oracle检查点
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2013-07-27

  • 博文量
    4
  • 访问量
    16516