科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道ORACLE 临时表的应用

ORACLE 临时表的应用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  1、前言   目前所有使用Oracle作为数据库支撑平台的应用,大部分数据量比较庞大的系统,即表的数据量一般情况下都是在百万级以上的数据量。当然在Oracle 中创建分区是一种不错的选择,但是当你发现你的应用有多张表关联的时候。

作者:中国IT实验室 来源:中国IT实验室 2007年10月7日

关键字: ORACLE

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

 

  3、例子:

  1)、会话级(Session关闭掉之后数据就没有了,当Commit的时候则数据还在,当Rollback的时候则数据也是一样被回滚):

STU_ID CLASS_ID STU_NAME STU_MEMO
------ -------- -------- ------------------------
1 1 张三 福建
2 1 刘德华 福州
3 2 S.H.E 厦门
                                          4 2 张惠妹 厦门

STU_ID CLASS_ID STU_NAME STU_MEMO
------ -------- -------- --------------------
1 1 张三 福建
2 1 刘德华 福州
3 2 S.H.E 厦门
                                    4 2 张惠妹 厦门

STU_ID CLASS_ID STU_NAME STU_MEMO
------ -------- -------- ------------------
1 1 张三 福建
2 1 刘德华 福州
3 2 S.H.E 厦门
4 2 张惠妹 厦门
                              4 2 张惠妹 厦门

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也看不到数据了,这个时候数据就已经被截断了。

  运行结果如下:

CLASS_ID CLASS_NAME CLASS_MEMO
-------- ---------- -------------------
1 计算机 9608
2 经济信息 9602
3 经济信息
SQL> delete from classes where class_id=3 ;
1 row deleted
SQL> select * from classes ;
CLASS_ID CLASS_NAME CLASS_MEMO
-------- ---------- -----------
1 计算机 9608
2 经济信息 9602
SQL> commit;
Commit complete
SQL> 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"

  以上是我在对大表进行优化的时候采用的一些手段,效果显著。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章