Oracle 临时表的应用--(二)

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

 insert into student(stu_id,class_id,stu_name,stu_memo) values(1,1,''张三'',''福建'');
 insert into student(stu_id,class_id,stu_name,stu_memo) values(2,1,''刘德华'',''福州'');
 insert into student(stu_id,class_id,stu_name,stu_memo) values(3,2,''S.H.E'',''厦门'');
SQL> select *from student ;

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

中国网管联盟www.bitscn.com

 

SQL> commit;
Commit complete
SQL> select * from student ;

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

 

SQL>insert into student(stu_id,class_id,stu_name,stu_memo) values(4,2,''张惠妹'',''厦门'');
1 row inserted
SQL> select * from student ;

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

 

SQL> rollback ;
Rollback complete
SQL> select * from student ;

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

 

 

2)、事务级(Commit之后就删除数据):本例子将采用以下的数据: feedom.net

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''); 中国网管联盟www_bitscn_com 

中国网管联盟www_bitscn_com

 

  在一个SESSION中(比如SQLPLUS登陆)插入上面3条记录,然后再以另外一个SESSION(用SQLPLUS再登陆一次)登陆,当你 select * from classes;的时候,classes表是空的,而你再第一次登陆的SQLPLUS中select的时候可以查询到,这个时候你没有进行commit或者rollback之前你可以对刚才插入的3条记录进行update、delete等操作,当你进行commit或者rollback的时候,这个时候由于你的表是事务级的临时表,那么在插入数据的session也看不到数据了,这个时候数据就已经被截断了。

 

SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(1,''计算机'',''9608'');
1 row inserted
SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(2,''经济信息'',''9602'');
1 row inserted
SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(3,''经济信息'',''9603'');
1 row inserted
SQL> update classes set class_memo ='''' where class_id=3 ;
1 row updated
SQL> select * from classes ;

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>  feedom.net 


、临时表的应用

  1)、当某一个SQL语句关联的表在2张及以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中。 54ne.com

  2)、程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用的等等。 feedom.net

  5、注意事项:

 

  1)、临时表的索引以及对表的修改、删除等和正常的表是一致的。 中国网管联盟www_bitscn_com

  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"

54com.cn

 

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

你可能感兴趣的:(oracle,sql,应用服务器,.net)