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. php输出错误信息

    error_reporting(E_ALL);  ini_set('display_errors','on'); header("Content-Type:text/html;charset ...

  2. cocos2d-x引擎实现$1Unistroke Recognizer手势识别

    $1 Unistroke(单笔画) Recognizer官网 http://depts.washington.edu/aimgroup/proj/dollar/ (在官网还有多笔画的识别库) 代码下载 ...

  3. Java设计模式09:单例模式的强化(控制实例个数n)

    1. 单例模式的本质: 控制实例数目(目的节约资源) 2. 单例模式体现的一些思想: (1)延迟装载(Lazy Load):懒汉式 (2)缓存:饿汉式 3. 单例模式的变形使用: 控制使用实例个数为3 ...

  4. oracle的sql函数

    只读事务set transaction read only当一个用户添加了只读事务,则查询时只会查到设置只读事务之前的内容,在并发量大的系统中,通过设置只读事务 便于统计 oracle的sql函数的使 ...

  5. CentOS内核升级

    CentOS 6.5自动内核升级的主要步骤: 1)内核文件下载到/usr/src/kernel/目录下: 如:2.6.32-431.5.1.el6.x86_64编译后差不多有48M大小: 2)生成的引 ...

  6. malloc函数的底层实现你是否清楚

    malloc函数的底层实现你是否清楚 说起malloc函数,每个人都能说出它的功能,而且我们经常会用到,那么今天我要说的是关于malloc函数在编译器的底层实现,如果你对它的实现已经很清楚了,那么你可 ...

  7. 局域网内sqldeveloper客户端连接oracle服务器

    1:输入参数 输入连接名(随便写) 用户名:system/tiger/sys或者是创建的用户 口令:设置的口令 主机名:连接的数据库所在的ip 端口:默认是1521 sid:orcl安装时自己设置的 ...

  8. Visual Studio dte 获取代码方法注释

  9. [记录]使用setTimeout实现不同时间进行切换文本的颜色

    开始使用的是setinterval(),但是setinterval()的time是固定的,假如我想改变time,就需要每次clearInterval()一次. 如: setInterval(funct ...

  10. git命令(流程)

    1,配置你的信息: git config --global user.name 你的名字 git config --global user.email 你的邮箱 --global 表示所有git仓库都 ...