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. valgrind 生成mysqld调用图之 select now()跟踪

    1.mysqld起动方式: 1.mysqld以root用户运行 valgrind --tool=callgrind --separate-threads=yes  --trace-children=y ...

  2. select option jquery javascript

    jQuery获取Select选择的Text和Value: $('#myselect').find('option:selected').attr('ent_id');      $('#ent_id' ...

  3. win7如何共享文件 图文教你设置win7文件共享

    点评:win7文件共享已成为网友们之间的热议,接下来为大家分享下如何共享文件,首先开启guest账户( 开始菜单 → 运行 → services.msc → 双击 server 服务项 ,设置启动类型 ...

  4. logstash multiline 把文件处理为单个 event

    需求 多个文本文件需要存到 ES 中去. 每一个文件存放为一个 doc. 每一个文件都是多行的,行数不定,且没有固定的内容格式. update time: Mon Jun :: CST package ...

  5. posix thread概述(示例代码)

    一个简单的alarm实例 errors.h头文件 #ifndef __ERRORS_H #define __ERORRS_H #include<stdio.h> #include<u ...

  6. 关于XML文档的讲解

    1        XML的概述 1.1 什么是XML XML全称为Extensible Markup Language,意思是可扩展的标记语言.XML语法上和HTML比较相似,但HTML中的元素是固定 ...

  7. 编辑一个小的smarty类

    首先先建立两个文件夹,一个temp,存储编译前的文件,一个comp,存储编译后的文件,编译前的文件使用{$title}代替<?php echo $title; ?>,然后将前者编译成后者再 ...

  8. EL标签库

    首先要导入jar包 jst1.jar   standard.jar 在页面中引入标签库 <%@taglib uri="..." prefix=".."%& ...

  9. 用jsp方式通知客户端下载文件

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  10. Java中startWith方法的使用!

    今天看Java代码时,看到了字符串有一个方法是startsWith(String str)当时觉得见名之意,很简单吗,然后就自己动手做了一下,没想到发现了一个startsWith()方法的重载,sta ...