a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 108|回复: 1

[其他] Oracle认证:oracle临时表用法总结

[复制链接]
发表于 2012-8-4 13:41:06 | 显示全部楼层 |阅读模式
1 、前言   今朝所有使用 Oracle 作为数据库支撑平台的应用,年夜部门数据量斗劲复杂的系统,即表的数据量一般情形下都是在百万级以上的数据量。
/ f' N5 p, R5 E5 ^7 v  当然在 Oracle 中建树分区是一种不错的选择,可是当你发现你的应用有多张表联系关系的时辰,而且这些表年夜部门都是斗劲复杂,而你联系关系的时辰发现其中的某一张或者某几张表联系关系之后获得的结不美观集很是小而且发芽获得这个结不美观集的速度很是快,那么这个时辰我考虑在 Oracle 中建树“姑且表”。2 S5 Q; Z1 d7 V$ W0 |9 m/ x
  我对姑且表的理解:在 Oracle 中建树一张表,这个表不用于其他的什么功能,首要用于自己的软件系统一些特有功能才用的,而当你用完之后表中的数据就没用了。 Oracle 的姑且表建树之后根基不占用表空间,如不美观你没有指定姑且表(搜罗姑且表的索引)存放的表空的时辰,你插入到姑且表的数据是存放在 ORACLE 系统的姑且表空间中( TEMP )。2 j7 J4 a# Q) U; A0 T* x
  2 、姑且表的建树9 g9 B' w1 b$ p; r/ }* F" o/ {
  建树Oracle 姑且表,可以有两种类型的姑且表:
+ Q8 w8 b1 v0 _4 ~  会话级的姑且表
- {$ t7 y9 K* j  事务级的姑且表 。; I4 l6 j: }, P4 H* g7 i
  1) 会话级的姑且表因为这这个姑且表中的数据和你的当前会话有关系,当你当前SESSION 不退出的情形下,姑且表中的数据就还存在,而当你退出当前SESSION 的时辰,姑且表中的数据就全数没有了,当然这个时辰你如不美观以此吐矣闽SESSION 上岸的时辰是看不到此吐矣闽SESSION 中插入到姑且表中的数据的。即两个分歧的SESSION 所插入的数据是互不相关的。当某一个SESSION 退出之后姑且表中的数据就被截断(truncate table ,即数据清空)了。会话级的姑且表建树体例:
3 {8 i6 C. z9 c  Create Global Temporary Table Table_Name
, w- R6 ]) A  u+ p  (Col1 Type1,Col2 Type2...) On Commit Preserve Rows ;# S" [% `" x, s, e
  举例:
& n+ g8 s1 z" B, [* q- q  create global temporary table Student
" [, s; \; U9 z" H: ?  (Stu_id Number(5),
2 X4 h. {* n1 g  Class_id  Number(5),
/ l8 W% l& J7 X7 R  Stu_Name Varchar2(8),
( j5 E8 |8 m% ^+ ~6 i4 T6 ]8 b: v  Stu_Memo varchar2(200)) on Commit Preserve Rows ;" ^) f" i* ^' t* Q
  2) 事务级姑且表是指该姑且表与事务相关,当进行事务提交或者事务回滚的时辰,姑且表中的数据将自行被截断,其他的内容和会话级的姑且表的一致(搜罗退出SESSION 的时辰,事务级的姑且表也会被自动截断)。事务级姑且表的建树体例:
# C6 Y& c/ y; d  Create Global Temporary Table Table_Name
2 Y2 W5 w  a% t5 E/ ^6 K* k( Q, y  (Col1 Type1,Col2 Type2...) On Commit Delete Rows ;
) X0 _; y3 q( a7 V% }3 @# v4 M  举例:
/ g, p. ~* j- `' f0 d8 i) l  create global temporary table Classes
  W: ]% i- O- R" i2 J$ i/ j  (Class_id Number(5),# F9 x9 L& j! w! S/ z! g; l
  Class_Name Varchar2(8),
1 @$ g# t' _' P6 x2 J
; K! f+ O# o) k% R; K' ?( ~  Class_Memo varchar2(200)) on Commit delete Rows ;
回复

使用道具 举报

 楼主| 发表于 2012-8-4 13:41:07 | 显示全部楼层

Oracle认证:oracle临时表用法总结

</p>  3)   两中类型姑且表的区别( J) l* P0 e: p9 _* @
  会话级姑且表采用 on commit preserve rows ;而事务级则采用 on commit delete rows ;用法上,会话级别只有当会话竣事姑且表中的数据才会被截断,而且事务级姑且表则不管是 commit 、 rollback 或者是会话竣事,姑且表中的数据都将被截断
% R6 Q& \0 v/ O7 ]+ H4 `, a1 Z  4 )什么时辰使用姑且表% `: D/ u% \9 ^6 D1 A7 W
  1 )、当某一个 SQL 语句联系关系的表在 2 张及以上,而且和一些小表联系关系。可以采用将年夜表进行分拆而且获得斗劲小的结不美观集结存放在姑且表中
& \6 v8 b. z1 P' R2 Y  2 )、轨范执行过程中可能需要存放一些姑且的数据,这些数据在整个轨范的会话过程中都需要用的等等。
/ R; S2 _; w" V8 g  3 . 例子:略% S( O: f- f' {# T& K/ V, w
  4 .姑且表的不足之处: n% \- }( d& |& S2 o( U. u" A! ?
  1 )不撑持 lob 对象,这也许是设计者基于运行效率的考虑,但现实应用中确实需要此功能时就无法使用姑且表了。
4 U$ L6 h  A$ j3 p  2 )不撑持主外键关系
0 v. c  s7 n* M. d# B  所以,因为以上原因,我们可以自己建树姑且表,以填补 oracle 姑且表的不足之处
: G9 h5 z9 p( X0 }8 z( y  膳缦沔的都是本人经由测试的,但下面是在网上搜索到的体例,本人具体没有测试过,不外感受可行性很强,有时刻测试下  X" S4 F, v& G0 h1 ~2 ?# J/ o
  建树体例:
* a3 `$ m, D4 U- d  1 、以常规表的形式建树姑且数据表的表结构,但要在每一个表的主键中插手一个 SessionID  列以区分分歧的会话。(可以有 lob 列和主外键)
+ G# G. }4 q5 h  2 、写一个用户注销触发器,在用户竣事会话的时辰删除本次会话所插入的所有记实 (SessionID 等于本次会话 ID 的记实 ) 。+ t; W# h0 p: I7 h! w3 S8 X0 j1 Q
  3 、轨范写入数据时,要顺便将当前的会话 ID(SessionID) 写入表中。. _0 d# V: ~9 N' J+ `6 e
  4 、轨范篡夺数据时,只篡夺与当前会话 ID 不异的记实即可。' a6 B8 r+ }; o# Y! {8 t
  功能增强的扩展设计:7 L' w1 P7 j8 n
  1 、可以在数据表上成立一个视图,视图对记实的筛选前提就是当前会话的SessionID 。+ I4 D' b$ f" k: c  z7 ]4 D2 I
  2 、数据表中的SessionID 列可以经由过程Trigger 实现,以实现对应用层的透明性。
  U8 N& @. u8 E* e) f% I1 t* }) f2 Z  3 、高级用户可以访谒全局数据,以实现加倍复杂的功能。
- D( @$ p% p% g9 y  扩展姑且表的利益:
5 z5 R( J, H/ x  Z+ y4 i  `  1 、实现了与Oracle 的基于会话的姑且表不异的功能。2 q/ k2 U0 E7 x" j1 j  D: o
  2 、撑持SDO_GEOMETRY 等lob 数据类型。$ P+ i1 U. ^( c9 C& H
  3 、撑持表间的主外键毗连,且主外键毗连也是基于会话的。
: g' O& h6 H, [  4 、高级用户可以访谒全局数据,以实现加倍复杂的功能
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-16 02:22 , Processed in 0.183888 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表