首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Oracle频道
中国IT教育
Google
首页 入门基础 安装配置 体系架构 PLSQL 备份恢复 性能调优 开发技术 资讯动态 考试认证 下载 专题 讨论
您现在的位置: 中国IT实验室 >> Oracle >> 开发技术 >> 正文

小议Oracle 11g的自治事务(六)

      自治事务提供了很方便的事务控制功能,使得用户可以在不影响当前事务的情况下,提交或回滚对数据库的修改。那么Oracle为了实现这个功能是否付出了很多的代价呢,下面对比一下自治事务和普通事务的统计信息:

SQL> CREATE GLOBAL TEMPORARY TABLE T_SESSION_STAT
  2 (ID NUMBER, NAME VARCHAR2(100), VALUE NUMBER)
  3 ON COMMIT PRESERVE ROWS;

  表已创建。 

SQL> CREATE TABLE T_RECORD (ID NUMBER, NAME VARCHAR2(30));

  表已创建。  

SQL> CREATE OR REPLACE PROCEDURE P_TEST AS
  2 BEGIN
  3 INSERT INTO T_RECORD VALUES (1, 'TEST');
  4 COMMIT;
  5 END;
  6 /

  过程已创建。 

SQL> CREATE OR REPLACE PROCEDURE P_TEST_AUTO AS
  2 PRAGMA AUTONOMOUS_TRANSACTION;
  3 BEGIN
  4 INSERT INTO T_RECORD VALUES (2, 'TEST');
  5 COMMIT;
  6 END;
  7 /

  过程已创建。 

SQL> SET SERVEROUT OFF
  SQL> BEGIN
  2
  3 INSERT INTO T_SESSION_STAT SELECT 1, NAME, VALUE
  4 FROM V$SESSTAT A, V$STATNAME B
  5 WHERE A.STATISTIC# = B.STATISTIC#
  6 AND A.SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM = 1);
  7
  8 P_TEST;
  9
  10 INSERT INTO T_SESSION_STAT SELECT 2, NAME, VALUE
  11 FROM V$SESSTAT A, V$STATNAME B
  12 WHERE A.STATISTIC# = B.STATISTIC#
  13 AND A.SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM = 1);
  14
  15 P_TEST_AUTO;
  16
  17 INSERT INTO T_SESSION_STAT SELECT 3, NAME, VALUE
  18 FROM V$SESSTAT A, V$STATNAME B
  19 WHERE A.STATISTIC# = B.STATISTIC#
  20 AND A.SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM = 1);
  21
  22 FOR C IN
  23 (
  24 SELECT *
  25 FROM
  26 (
  27 SELECT A.NAME, C.VALUE + A.VALUE - 2 * B.VALUE VALUE
  28 FROM
  29 T_SESSION_STAT A,
  30 T_SESSION_STAT B,
  31 T_SESSION_STAT C
  32 WHERE A.NAME = B.NAME
  33 AND A.NAME = C.NAME
  34 AND A.ID = 1
  35 AND B.ID = 2
  36 AND C.ID = 3
  37 )
  38 WHERE ABS(VALUE) > 0
  39 ) LOOP
  40 DBMS_OUTPUT.PUT_LINE(RPAD(C.NAME, 50, ' ') || C.VALUE);
  41 END LOOP;
  42
  43 END;
  44 /
  PL/SQL 过程已成功完成。
  SQL> TRUNCATE TABLE T_SESSION_STAT;

[1] [2] [3] [4] 下一页

【责编:Chuan】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Oracle频道相关导航