此文章是根据官方改变

模拟帐户转账流程
1.JOHN帐户扣除-DAVID帐户增加-记录日志-事务提交
三个操作必须全部完成此事务才完成,否则失败
创建帐户余额表自增字段自增序列;
   ;
创建支票表自增字段自增序列;
   ;
创建日志记录自增字段自增序列;l
   ;
 
2.创建余额表saving_accounts
create table saving_accounts
(account_id int primary key ,
) ,
 ) );
comment on table saving_accounts is  '帐户余额表' ;
comment on column saving_accounts.account_id is '帐户ID' ;
comment on column saving_accounts.account_name is '帐户名称' ;
comment on column saving_accounts.pay is '帐户余额' ;
 
创建支票余额表
create table checking_accounts
(check_id int primary key ,
) ,
 ) );
comment on table checking_accounts is  '支票帐户余额表' ;
comment on column checking_accounts.check_id is '支票帐户ID' ;
comment on column checking_accounts.check_name is '支票帐户名称' ;
comment on column checking_accounts.check_pay is '支票帐户余额' ;
 
创建转账日志表
create table log_accounts
(log_id int primary key ,
log_date date  default (sysdate ) not null,
account_id int not null ,
check_id int not null ,
 ) );
comment on table log_accounts is  '转账日志表' ;
comment on column log_accounts.log_id is '转账日志ID' ;
comment on column log_accounts.log_date is '转账日期' ;
comment on column log_accounts.account_id is '转账帐户ID' ;
comment on column log_accounts.check_id is '支票帐户ID' ;
comment on column log_accounts.change_pay is '支票帐户余额' ;
 
查询建表是否成功
select * from log_accounts;
select * from saving_accounts;
select * from checking_accounts;
 
3.插入数据
插入 saving_accounts
insert into saving_accounts
values(saving_seq.nextval,'john',1000);
insert into saving_accounts
values(saving_seq.nextval,'david',2000);
insert into saving_accounts
values(saving_seq.nextval,'alex',3000);
insert into saving_accounts
values(saving_seq.nextval,'lily',5000);
insert into saving_accounts
values(saving_seq.nextval,'joe',1500);
commit;
 
插入checking_accounts
insert into checking_accounts
values( check_seq.nextval,'john',2000);
insert into checking_accounts
values( check_seq.nextval,'david',500);
insert into checking_accounts
values( check_seq.nextval,'alex',2000);
insert into checking_accounts
values( check_seq.nextval,'lily',1500);
insert into checking_accounts
values( check_seq.nextval,'joe',4000);
commit;
 
用户转账的步骤(转账到支票)
如john
防止事务失败可以加入异常处理
begin
savepoint sp1
--SET TRANSACTION NAME 'account_update'; 可以设置事务名称transaction name
--减少john 帐户余额200转入到david
update saving_accounts a
set pay=pay-200
where a.account_id=1;
--SAVEPOINT after_update_savind_accounts; 设置rollback点
--增加david支票余额
update checking_accounts b
set check_pay=check_pay+200
where b.check_id=2;
--写入日志表
insert into log_accounts(log_id,account_id,check_id,change_pay)
values(log_seq.nextval,1,2,200);
--ROLLBACK TO SAVEPOINT  after_update_savind_accounts; 回滚到saingpoint  after_update_savind_accounts
--rollback 将回滚事务account_update
exception
  when others then
      rollback to savepoint sp1;
end;
commit work;
 
总结:
如果在一个 SQL 语句在执行过程中发生了错误,那么此语句对数据库产生的影响将被回滚(roll back)。回滚后就如同此语句从未执行过。

oracle 事务测试的更多相关文章

  1. Oracle事务

    Oracle事务的ACID特性 原子性Atomicity:事务中的所有动作要么都发生,要么都不发生. 一致性Consistency:事务将数据库从一种状态转变为下一种一致状态. 隔离性Isolatio ...

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

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

  3. Oracle事务之一:锁和隔离

    Oracle事务之一:锁和隔离 一. 事务概述 事务管理是数据库处理的核心.数据库既要保证用户能并发地执行事务,还要保证数据库的一致性. 当第一条可执行的SQL开始执行,就隐形地开始了一个事务,直到遇 ...

  4. oracle事务和锁

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

  5. oracle事务和锁(转)

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

  6. oracle事务(转)

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

  7. Oracle DG测试failover和后续恢复报告

    Oracle DG测试failover和后续恢复报告 一.概述 二.验证过程: 2.1 A库异常关闭 2.2 B库进行failover切换为新主库 2.3 要求C库成为新主库的备库 2.4 要求A库成 ...

  8. oracle 事务 与 提交

    Oracle事务 一般事务(DML)即数据修改(增.删.改)的事务事务会将所有在事务中被修改的数据行加上锁(行级锁),来阻止其它人(会话)同时对这些数据的修改操作.当事务被提交或回滚后,这些数据才会被 ...

  9. loadrunner 脚本开发-调用java jar文件远程操作Oracle数据库测试

    调用java jar文件远程操作Oracle数据库测试 by:授客 QQ:1033553122 测试环境 数据库:linux 下Oracle_11g_R2 Loadrunner:11 备注:想学ora ...

随机推荐

  1. JQueryMobile + PhoneGap 经验总结

    1. pageinit & pageshow JQM的官方手册重点提醒了使用$(document).bind(‘pageinit’)代替$(document).ready(). 但当你需要对某 ...

  2. EnterpriseLibrary之Caching应用

    http://blog.csdn.net/linux7985/article/details/6239433 http://cache.baiducontent.com/c?m=9f65cb4a8c8 ...

  3. IOS开发-视频,音频,录音简单总结

    /***** * 1. 视频播放 * *  @格式:mp4 mov m4v m2v 3gp 3g2 * *  @系统框架使用:#import <MediaPlayer/MediaPlayer.h ...

  4. 【性能测试】性能测试总结<二>

    本文主要介绍下性能测试的基本流程,性能测试从实际执行层面来看,测试的过程一般分为这么几个阶段,如下图: 下面分别介绍下每个阶段具体需要做什么: 一.性能需求分析: 首先,让我们来看看通过性能需求分析我 ...

  5. C++ Socket编程步骤 【转】

    sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW):基于TCP的socket编程是采用的流式套接字. 服务器 ...

  6. (转)textarea去掉右侧滚动条,去掉右下角拖拽

    本文转载自:http://blog.csdn.net/cctv_end/article/details/7946188 代码:  <TEXTAREA   style= "overflo ...

  7. Makefile编译选项CC与CXX/CPPFLAGS、CFLAGS与CXXFLAGS/LDFLAGS

    转自:http://www.firekyrin.com/archives/597.html 编译选项 让我们先看看 Makefile 规则中的编译命令通常是怎么写的. 大多数软件包遵守如下约定俗成的规 ...

  8. 【MySQL】原理 之 事务

    1.MySQL逻辑架构大致分为:连接认证层,核心服务层,存储引擎层. 2.锁策略,需要在开销和数据的安全性之间寻求平衡,这种平衡会影响到性能. 3.写锁优先于读锁. 4.行级锁只在存储引擎层实现,而M ...

  9. spark on hive 配置hive的metastore为mysql

    <property><name>hive.metastore.uris</name><value></value><descripti ...

  10. Form_Form Builder本地部署运行的实现(案例)

    2014-08-09 Created By BaoXinjian