设为首页 收藏本站
查看: 703|回复: 0

[经验分享] Oracle中临时表的深入研究

[复制链接]

尚未签到

发表于 2016-7-22 11:50:11 | 显示全部楼层 |阅读模式
最近考虑到我们的数据库端写存储过程关于临时表使用的情况,由于我们

现在还不清楚数据库端到底是怎么处理的,是否和Sql Server的处理方式相

同,是否会存在隐患等等一些问题,为了避免将来不必要的麻烦我做了深

入的研究和查看了一些权威的资料,现在和大家共享,希望大家在处理

Oracle临时表是注意一下:
  

首先是创建临时表的语法:  

CREATE GLOBAL TEMPORARY TABLE table  

"(" column datatype [DEFAULT expr] [{ NULL | NOT NULL}]   

[, column datatype [DEFAULT expr] [ {NULL | NOT NULL} ]... ")"  

ON COMMIT {DELETE | PRESERVE } ROWS ;

  

Oracle中的临时表有两种一种是事务级别的临时表它在事务结束的时候自

动清空记录,另一种是会话级的它在我们访问数据库是的一个会话结束后

自动的清空。关于临时表多用户并行不是问题,一个会话从来不会阻止另

一个会话使用临时表。即使“锁定”临时表,一个会话也不会阻止其他会

话使用它们的临时表。  


如果有在SQL SERVER \sybase中使用临时表的经验,需要主要考

虑的不是执行select xy ,z into #temp from some_table 来创建和装载临时

表,而是:  


1. 对于每一个数据库,创建所有的temp表作为全局临时表。这将作

为应用程序安装的一部分完成,就像创建永久表一样。  


2. 只要在过程中简单的insert into temp(x,y,z) selelct x,y,z from some_table
  

只是理解这点,这里的目的不是运行存储过程创建表。在Oracle中这样做

不是正确的方法。DDL是一种消耗资源非常大的操作,在运行时尽量不要

使用,应用程序需要的临时表应在应用程序安装时创建,而不是在运行时

创建。Oracle中的临时表和其他数据库的临时表是相似的,在每个数据库

中创建临时表一次,不必在数据库中的每个存储过程中创建一次。临时表

总是存在的,他们作为对象存在于数据字典中,并且总是保持为空,直到

有会话在其中放入数据。  

  

所有我在这里说明如果我们在存储过程中建临时表,每次都建立一个那么

我的系统随着用户的操作调用此存储过程,每次多一个这样的表,我们在

不知不觉中数据库中的表的数量会越来越多,而我们还不知道会存在很大

的隐患的所有说这点不可小视,为了我们的系统能在客户那里平稳、安全

的运行我们一定要注意这样的问题。如果不手动Drop 表,临时表还是在数据字典中存在的。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-247872-1-1.html 上篇帖子: oracle高级复制同步复制配置步骤 下篇帖子: Oracle Procedure之字符串分隔
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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