[本站首页] [管理页面] [写新日志] [退出]

朝为田舍郎,暮登天子堂,将相本无种,男儿当自强。
首页(178) Hibernate(10) JAVA(19) Web(15) Struts(7) 口水(9) Ides(18) 其它(51) AJAX(6) database(29) 
Blog信息

blog名称:四裤全输的小窝~~
日志总数:178
评论数量:699
留言数量:198
访问次数:1154211
建立时间:2005年10月29日

Blog内搜索



日志更新

谷歌地图定位偏移解决方法
【转】利用Windows内置的命令作端口
WIN2003服务器安全加固方案
[转]sql server 日期比较、日
MediaCoder 一般参数设置
[转]VMware中创建共享磁盘阵列的方
缓解vss共享文件夹的安全隐患问题(转)
Delphi 中调用JavaScript
微软的官方方法:延长Windows Se
cxGrid 过滤 排序后 取选中记录的

最新评论

回复:谷歌地图定位偏移解决方法
回复:谷歌地图定位偏移解决方法
回复:WIN2003服务器安全加固方案
回复:cxGrid 过滤 排序后 取选中
回复:TreeView 父节点 子节点 
回复:[转]Oracle Instead
回复:DWR 官方下载地址
ugg  boots
回复:cxGrid 过滤 排序后 取选中
回复:DWR 官方下载地址

友情链接

biglin's Blog
NoisyRam's Blog
Stone's Blog
Kevin 的小家
『知』治通鉴

留言板




[database][转]Oracle关于临时表的操作
文章收藏,  网上资源,  软件技术,  电脑与网络 四裤全输 发表于 2006/8/2 13:06:58

对全局临时表的总结在临时表上的操作比在一般的表上的操作要快。因为:1创建临时表不需要往编目表中插入条目,临时表的使用也不需要访问编目表,因此也没有对编目表的争用。2仅有创建临时表的app才可存取临时表,所以在处理临时表时没有锁。3如果指定NOT LOGGED选项,在处理临时表时不记日志。所以如果有仅在数据库的一个会话中使用的大量临时数据,把这些数据存入临时表能大大提高性能。DECLARE GLOBAL TEMPORARY TABLE TT(C1 INT, C2 CHAR(20));在CONNECT RESET命令后,临时表不再存在。建临时表是动态编译的,所以对临时表的使用也必须放在DECLARE CURSER 后面CREATE PROCEDURE INSTT2(P1 INT, P2 CHAR(20))BEGIN DECLARE GLOBAL TEMPORARY TABLE TT(C1 INT, C2 CHAR(20)) % INSERT INTO SESSION.TT VALUES(P1, P2); BEGIN DECLARE C1 CURSOR WITH RETURN FOR SELECT * FROM SESSION.TT; END;END %2。事务特有的临时表 CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>) ON COMMIT DELETE ROWS; 在Oracle中,全局临时表并不会删除,实际上你只需要建立一次,以后直接应用就行了,这与MS和Sybase不一样。实际上在断开数据库连接时,临时 表中数据自动清空,不同的Session之间是隔离的,不许要当心相互影响,不过如果起用了连接共享的话,你要用On Commit delete rows使数据仅在事物内部有效。zt不同:1.SQL SERVER临时表是一种”内存表”,表是存储在内存中的.ORACLE临时表除非执行DROP TABLE,否则表定义会保留在数据字典中.2.SQL SERVER临时表不存在类似ORACLE临时表 事务级别 上的功能.3SQL SERVER本地临时表(#) 与 ORACLE的会话级别临时表类似,但是在会话退出的时候,ORACLE不会删除表.4SQL SERVER的全局临时表(##) 是指多个连接共享同一片内存.当没有指针引用该内存区域时,SQL SERVER自动释放全局临时表.5由于ORACLE不是一种 内存中的数据库. 所以如果ORACLE类似SQL SERVER 频繁的对临时表进行建立和删除,必定会影响性能.所以ORACLE会保留临时表的定义直到用户DROP TABLE.6 在ORACLE中,如果需要多个用户共享一个表(类似SQL SERVER的全局临时表##).则可以利用永久表,并且在表中添加一些可以唯一标识用户的列.利用触发器和视图.当用户退出的时候,根据该登陆用户的唯 一信息删除相应的表中的数据. 这种方法给ORACLE带来了一定量的负载.是TEMPORARY CREATE GLOBAL TEMPORARY TABLE flight_schedule ( startdate DATE, enddate DATE, cost NUMBER) --------------------------------------------------------------- create proecdure name_pro as str varchar2(100); begin str:='CREATE GLOBAL TEMPORARY TABLE TABLENAME ON COMMIT PRESERVE ROWS as select * from others_table'; execute immediate str; end; /testCREATE OR REPLACE PROCEDURE p_ll ISstrsql varchar2(1000);BEGIN strsql :='CREATE GLOBAL TEMPORARY TABLE tmp_ll01 ' || '(CTRL_ENT_ID VARCHAR2(100),COL_ENT_ID VARCHAR2(100),updateable INTEGER,ENABLED INTEGER,VISIBLE INTEGER' || ',INSERTABLE INTEGER,deleteable INTEGER,CHANGEABLE INTEGER) on commit preserve rows'; EXECUTE IMMEDIATE strsql; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN -- Consider logging the error and then re-raise RAISE;END p_ll;/beginp_ll();end;--正确执行---------------------------------------------------OTHER:zt需要创建一个临时表,请举例说明,谢谢! --------------------------------------------------------------- 是TEMPORARY CREATE GLOBAL TEMPORARY TABLE flight_schedule ( startdate DATE, enddate DATE, cost NUMBER) --------------------------------------------------------------- create proecdure name_pro as str varchar2(100); begin str:='CREATE GLOBAL TEMPORARY TABLE TABLENAME ON COMMIT PRESERVE ROWS as select * from others_table'; execute immediate str; end; /可以把临时表指定为事务相关(默认)或者是会话相关:ON COMMIT DELETE ROWS:指定临时表是事务相关的,Oracle在每次提交后截断表。ON COMMIT PRESERVE ROWS:指定临时表是会话相关的,Oracle在会话中止后截断表。=================可以创建以下两种临时表:1。会话特有的临时表 CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>) ON COMMIT PRESERVE ROWS;========对全局临时表的总结在临时表上的操作比在一般的表上的操作要快。因为:1创建临时表不需要往编目表中插入条目,临时表的使用也不需要访问编目表,因此也没有对编目表的争用。2仅有创建临时表的app才可存取临时表,所以在处理临时表时没有锁。3如果指定NOT LOGGED选项,在处理临时表时不记日志。所以如果有仅在数据库的一个会话中使用的大量临时数据,把这些数据存入临时表能大大提高性能。DECLARE GLOBAL TEMPORARY TABLE TT(C1 INT, C2 CHAR(20));在CONNECT RESET命令后,临时表不再存在。建临时表是动态编译的,所以对临时表的使用也必须放在DECLARE CURSER 后面CREATE PROCEDURE INSTT2(P1 INT, P2 CHAR(20))BEGIN DECLARE GLOBAL TEMPORARY TABLE TT(C1 INT, C2 CHAR(20)) % INSERT INTO SESSION.TT VALUES(P1, P2); BEGIN DECLARE C1 CURSOR WITH RETURN FOR SELECT * FROM SESSION.TT; END;END %2。事务特有的临时表 CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>) ON COMMIT DELETE ROWS; 在Oracle中,全局临时表并不会删除,实际上你只需要建立一次,以后直接应用就行了,这与MS和Sybase不一样。实际上在断开数据库连接时,临时 表中数据自动清空,不同的Session之间是隔离的,不许要当心相互影响,不过如果起用了连接共享的话,你要用On Commit delete rows使数据仅在事物内部有效。zt3建立临时表 临时表的定义对所有会话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; A12)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 2SQL> select * from admin_work_area;STARTDATE ENDDATE CLASS---------- ---------- --------------------17-1&Ocirc;&Acirc; -03 17-1&Ocirc;&Acirc; -03 session temperary会话2:SQL> select * from permernate; A---------- 1 2SQL> select * from admin_work_area; 未选择行.会话2看不见会话1中临时表的数据.


阅读全文(4527) | 回复(1) | 编辑 | 精华

回复:[转]Oracle关于临时表的操作
文章收藏,  网上资源,  软件技术,  电脑与网络 1(游客)发表评论于2008/7/29 14:03:35




个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)
站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.195 second(s), page refreshed 144763495 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号