1.sqlplus 客户端正常退出

SQL> desc t;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
TSP TIMESTAMP(6)
CNT NOT NULL NUMBER(38) SQL> insert into t values(sysdate,1); 已创建 1 行。 SQL> exit
从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开 C:\Users\zen>sqlplus hbkf_crm/hbkf_crm4test SQL*Plus: Release 11.2.0.1.0 Production on 星期日 11月 17 12:28:29 2013 Copyright (c) 1982, 2010, Oracle. All rights reserved. 连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> select * from t; TSP
---------------------------------------------------------------------------
CNT
----------
17-11月-13 12.27.58.000000 下午
1 SQL>

语句正常执行sqlplus正常退出,sqlplus commit修改。

SQL> insert into t values(sysdate,2);

已创建 1 行。

SQL> insert into t values(sysdate,2);
insert into t values(sysdate,2)
*
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (HBKF_CRM.SYS_C0011518) SQL> exit
从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开 C:\Users\zen>sqlplus hbkf_crm/hbkf_crm4test SQL*Plus: Release 11.2.0.1.0 Production on 星期日 11月 17 12:33:35 2013 Copyright (c) 1982, 2010, Oracle. All rights reserved. 连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> select * from t; TSP
---------------------------------------------------------------------------
CNT
----------
17-11月-13 12.27.58.000000 下午
1 17-11月-13 12.33.19.000000 下午
2 SQL>

这里应该是显示的语句级原子性。

SQL> select name,text from user_source t where t.name ='P1';

NAME  TEXT
----- ------------------------------------------------------------
P1 procedure p1(num INT)
P1 IS
P1
P1 BEGIN
P1
P1 INSERT INTO t(tsp,cnt) VALUES(sysdate,num);
P1 INSERT INTO t(tsp,cnt) VALUES(sysdate,num+1);
P1 INSERT INTO t(tsp,cnt) VALUES(sysdate,num+2);
P1 INSERT INTO t(tsp,cnt) VALUES(sysdate,num+2);
P1 COMMIT;
P1 NAME TEXT
----- ------------------------------------------------------------
P1 end p1; 已选择12行。 SQL> exec p1(6);
BEGIN p1(6); END; *
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (HBKF_CRM.SYS_C0011518)
ORA-06512: 在 "HBKF_CRM.P1", line 9
ORA-06512: 在 line 1 SQL> select * from t; TSP
-------------------------------------------------------------------------
CNT
----------
17-11月-13 12.27.58.000000 下午
1 17-11月-13 12.49.08.000000 下午
3 17-11月-13 12.33.19.000000 下午
2 TSP
-------------------------------------------------------------------------
CNT
----------
17-11月-13 12.46.55.000000 下午
4 17-11月-13 12.47.23.000000 下午
5 SQL> select name,text from user_source t where t.name ='P1'; NAME TEXT
----- ------------------------------------------------------------
P1 procedure p1(num INT)
P1 IS
P1
P1 BEGIN
P1
P1 INSERT INTO t(tsp,cnt) VALUES(sysdate,num);
P1 INSERT INTO t(tsp,cnt) VALUES(sysdate,num+1);
P1 INSERT INTO t(tsp,cnt) VALUES(sysdate,num+2);
P1 INSERT INTO t(tsp,cnt) VALUES(sysdate,num+2);
P1 COMMIT;
P1 EXCEPTION WHEN OTHERS THEN NAME TEXT
----- ------------------------------------------------------------
P1 dbms_output.put_line(sqlcode||':'||SQLERRM);
P1
P1 end p1; 已选择14行。 SQL> exec p1(6); PL/SQL 过程已成功完成。
SQL> select tsp,cnt from t; TSP CNT
---------------------------------- ----------
17-11月-13 01.00.20.000000 下午 6
17-11月-13 01.00.20.000000 下午 7
17-11月-13 01.00.20.000000 下午 8
17-11月-13 12.27.58.000000 下午 1
17-11月-13 12.49.08.000000 下午 3
17-11月-13 12.33.19.000000 下午 2
17-11月-13 12.46.55.000000 下午 4
17-11月-13 12.47.23.000000 下午 5 已选择8行。 SQL>

可以看出TOM大师为何对 when others 语句如此有看法了SQL> select name,text from user_source t where t.name ='P1';


NAME TEXT
----- ------------------------------------------------------------
P1 procedure p1(num INT)
P1 IS
P1
P1 BEGIN
P1
P1 INSERT INTO t(tsp,cnt) VALUES(sysdate,num);
P1 INSERT INTO t(tsp,cnt) VALUES(sysdate,num+1);
P1 INSERT INTO t(tsp,cnt) VALUES(sysdate,num+2);
P1 INSERT INTO t(tsp,cnt) VALUES(sysdate,num+2);
P1 COMMIT;
P1 EXCEPTION WHEN OTHERS THEN NAME TEXT
----- ------------------------------------------------------------
P1 dbms_output.put_line(sqlcode||':'||SQLERRM);
P1 ROLLBACK;
P1 end p1; 已选择14行。 SQL> exec p1(10); PL/SQL 过程已成功完成。 SQL> select * from t; TSP CNT
---------------------------------- ----------
17-11月-13 12.27.58.000000 下午 1
17-11月-13 12.49.08.000000 下午 3
17-11月-13 12.33.19.000000 下午 2
17-11月-13 12.46.55.000000 下午 4
17-11月-13 12.47.23.000000 下午 5 --加上rollback 可以回滚整个事务。
SQL> select name,text from user_source t where t.name ='P1';

NAME  TEXT
----- ------------------------------------------------------------
P1 procedure p1(num INT)
P1 IS
P1
P1 BEGIN
P1
P1 INSERT INTO t(tsp,cnt) VALUES(sysdate,num);
P1 INSERT INTO t(tsp,cnt) VALUES(sysdate,num+1);
P1 INSERT INTO t(tsp,cnt) VALUES(sysdate,num+2);
P1 INSERT INTO t(tsp,cnt) VALUES(sysdate,num+2);
P1 COMMIT;
P1 EXCEPTION WHEN OTHERS THEN NAME TEXT
----- ------------------------------------------------------------
P1 dbms_output.put_line(sqlcode||':'||SQLERRM);
P1 --ROLLBACK;
P1 RAISE;
P1 end p1; 已选择15行。
SQL> exec p1(10);
BEGIN p1(10); END; *
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (HBKF_CRM.SYS_C0011518)
ORA-06512: 在 "HBKF_CRM.P1", line 14
ORA-06512: 在 line 1 SQL> select * from t; TSP CNT
---------------------------------- ----------
17-11月-13 12.27.58.000000 下午 1
17-11月-13 12.49.08.000000 下午 3
17-11月-13 12.33.19.000000 下午 2
17-11月-13 12.46.55.000000 下午 4
17-11月-13 12.47.23.000000 下午
5 --抛出异常也会使事务回滚。

一个好的习惯是捕获到了错误,要么回滚,要么抛出异常。

Oracle 事务相关的一些测试的更多相关文章

  1. 转://Oracle 事务探索与实例(二)

    一数据库版本 SYS@LEO1>select * from v$version; BANNER ------------------------------------------------- ...

  2. Hibernate5笔记8--Hibernate事务相关内容

    Hibernate事务相关内容: (1) 事务四大特性(简称ACID): (1)原子性(Atomicity) 事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行. (2)一致性(Con ...

  3. 浅谈Oracle事务【转载竹沥半夏】

    浅谈Oracle事务[转载竹沥半夏] 所谓事务,他是一个操作序列,这些操作要么都执行,要么都不执行,是一个不可分割的工作单元.通俗解释就是事务是把很多事情当成一件事情来完成,也就是大家都在一条船上,要 ...

  4. Oracle 性能相关常用脚本(SQL)

    在缺乏的可视化工具来监控数据库性能的情形下,常用的脚本就派上用场了,下面提供几个关于Oracle性能相关的脚本供大家参考.以下脚本均在Oracle 10g测试通过,Oracle 11g可能要做相应调整 ...

  5. oracle事务和锁

    数据库事务概括 1. 说明 一组SQL,一个逻辑工作单位,执行时整体修改或者整体回退. 2.事务相关概念 1)事务的提交和回滚:COMMIT/ROLLBACK 2)事务的开始和结束 开始事务:连接到数 ...

  6. oracle事务和锁(转)

    If you use a SET TRANSACTION statement, then it must be the first statement in your transaction. How ...

  7. oracle事务(转)

    今天温习oracle事务,记录如下: 事务定义            事务是保持数据的一致性,它由相关的DDL或者DML语句做为载体,这组语句执行的结果要么一起成功,要么一起失败.        我们 ...

  8. MySQL学习笔记-事务相关话题

    事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...

  9. Oracle事务与锁

    Oracle事务与锁 2017-12-13 目录 1 数据库事务概括  1.1 事务定义  1.2 事务生命周期  1.3 事物的特性  1.4 死锁2 事务相关语句  2.1 事务相关语句概括  2 ...

随机推荐

  1. 信号之alarm和pause函数

    使用alarm函数可以设置一个计时器,在将来某个指定的时间,该计时器会超时.当计时器超时时,产生SIGALRM信号.如果不忽略或不捕捉此信号,则其默认动作是终止调用该alarm函数的进程. #incl ...

  2. java_类泛型基本实例

    package ming; public class Apple2<T> { public T info; public Apple2(T info) { this.info = info ...

  3. web service 部署

    写的不好,全当是写给自己看的吧. 公司用飞天诚信的加密狗对网站进行加密,我要部署加密狗的web service.注:web service 由加密狗公司提供. 1.新建网站dog

  4. 2014年6月5日 深圳 IBM 安全解决方案会议通知

    2014年6月5日 深圳 IBM 安全解决方案会议通知 http://gdtesting.com/news.php?id=191 时间: 2014年6月5日 地点: 深圳大中华喜来登 议程: IBM安 ...

  5. JS获取活动区域高和宽

    var width;            var height;            //获取窗口宽度            if (window.innerWidth)              ...

  6. Python 基础【第五篇】元组和列表

    一 .Python之列表: 其实所谓的列表我个人感觉和shell 中的数组是一样的(只是个人见解哦),列表其实说白了就是元素的组合: 格式: Name = [a,b,c,d] 下标: 每一个列表中的元 ...

  7. ThinkPHP的配置

    ThinkPHP配置:conf目录下 'URL_PATHINFO_DEPR'=>'-',//修改URL的分隔符, 'TMPL_L_DELIM'=>'<{', //修改左定界符 'TM ...

  8. scala学习笔记:理解函数

    定义一个函数: scala> def foo(x:Int)=x*2 foo: (x: Int)Int 可以采用匿名参数: scala> def foo:((Int)=>Int) = ...

  9. 汇总文件数据 VBA

    1 读取30个文件的数据信息 2 根据4个key值,判断累计数据 3 做sum , avg Sub 月汇总() Dim MyPath, MyName, AWbName Dim Wb As Workbo ...

  10. 初试zabbix

    一.zabbix简介    zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.       zabbix由zabbix server与可选组件zabbix a ...