oracle 事务测试

此文章是根据官方改变

模拟帐户转账流程
1.JOHN帐户扣除-DAVID帐户增加-记录日志-事务提交
三个操作必须全部完成此事务才完成,否则失败
创建帐户余额表自增字段自增序列
createsequencesaving_seqincrementby1startwith1maxvalue999999999999999999nocyclecache20;
创建支票表自增字段自增序列;
createsequencecheck_seqincrementby1startwith1maxvalue999999999999999999nocyclecache20;
创建日志记录自增字段自增序列;l
create sequence log_seq increment by 1 start with 1 maxvalue 999999999999999999 nocycle cache 20 ;
2.创建余额表saving_accounts
createtablesaving_accounts
(account_idintprimarykey,
account_namevarchar2(20) ,
paynumber(15,2) );
commentontablesaving_accountsis '帐户余额表';
commentoncolumnsaving_accounts.account_idis'帐户ID';
commentoncolumnsaving_accounts.account_nameis'帐户名称';
commentoncolumnsaving_accounts.payis'帐户余额';
创建支票余额表
createtablechecking_accounts
(check_idintprimarykey,
check_namevarchar2(20) ,
check_paynumber(15,2) );
commentontablechecking_accountsis '支票帐户余额表';
commentoncolumnchecking_accounts.check_idis'支票帐户ID';
commentoncolumnchecking_accounts.check_nameis'支票帐户名称';
commentoncolumnchecking_accounts.check_payis'支票帐户余额';
创建转账日志表
createtablelog_accounts
(log_idintprimarykey,
log_datedate default(sysdate)notnull,
account_idintnotnull,
check_idintnotnull,
change_paynumber(15,2) );
commentontablelog_accountsis '转账日志表';
commentoncolumnlog_accounts.log_idis'转账日志ID';
commentoncolumnlog_accounts.log_dateis'转账日期';
commentoncolumnlog_accounts.account_idis'转账帐户ID';
commentoncolumnlog_accounts.check_idis'支票帐户ID';
commentoncolumnlog_accounts.change_payis'支票帐户余额';
查询建表是否成功
select*fromlog_accounts;
select*fromsaving_accounts;
select*fromchecking_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)。回滚后就如同此语句从未执行过。

转载于:https://www.cnblogs.com/shawnloong/p/3295503.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/274047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apt-get 获取源码的方法

apt-get source gconf-editor –allow-unauthenticated 注:gconf-editor是一个包名,根据自己的需求相应更改即可

Java 集合之自动打包和解包以及泛型

自动打包与解包:泛型:上栗子: TestMap1.java: package com.zhj.www; import java.util.*;public class TestMap {public static void main(String[] args) {Map m1 new HashMap();Map m2 new TreeMap();//m1.put("one", new Inte…

select * from dim.dim_area_no@to_dw

应该是建的有database linksdim是用户名,dim_area_no是表名,to_dw 是建的database links的名,dim_area_no表属于dim用户创建database links的作用是连接其他数据库的表select * from dim.dim_area_noto_dw 这个语句的作用是查询属于dim用户的…

ios 内存管理 心得

- alloc, copy, retain会把引用计数1 - release会把引用计数-1 - 局部变量如果初始化时不是autorelease的,要及时调用release释放,并且赋值为nil否则引用仍然存在导致下次无法用nil做是否有值的判断 - 实例变量要在每次赋值时要先释放当前引用的对象再赋…

error while loading shared libraries: xxx.so.x 错误的原因和解决办法

一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如: tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory 原因一般有两个, 一个是操作系统里确实没有包含该共享库(lib*.…

泗洪高薪行业

泗洪高薪行业转载于:https://www.cnblogs.com/soundcode/p/3302297.html

libghttp 编译及封装使用实例

想用C语言写个采集程序,涉及到http相关的东西,找了找,有现成的libghttp库。 libghttp库的官方网址google一下第一条结果一般就是的:http://lfs.linuxsir.org/htdocs/blfscvs/gnome/libghttp.html 将源码包下载下来,进…

Java IO 节点流与处理流类型

处理流类型:1、处理流之首先缓冲流:解释:例子:TestBufferStream1.java package com.zhj.www;import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException;public class TestBufferStream1 …

高级浏览器-SRWare Iron 29.0.1600.0 版本发布

SRWare Iron是德国一安全公司srware改造的Chrome(铬)命名为铁(iron)的浏览器。于2008年9月18日首次发布。 据官方介绍,Iron浏览器砍掉了Chromium原程序中的很多有碍“隐私”问题的代码。 “iron中去除的功能包括&#…

shell中的${},##和%%的使用

假设我们定义了一个变量为: file/dir1/dir2/dir3/my.file.txt 可以用${ }分别替换得到不同的值: ${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt ${file##*/}:删掉最后一个 / 及其左边的字…

Java 线程多线程编程1---基础

1、线程的基本概念例子:分析:2、线程的创建和启动第一种线程的创建:定义一个线程类来实现Runner接口 例子: package com.zhj.www; import java.lang.Thread; public class TestThread1 {public static void main(String[] args) {…

移动互联网下一步:“深度学习”配合大数据

随着电子商务不断深入,百度、腾讯、阿里巴巴的移动互联网战略的可比性越来月低,如今百度的移动互联网的战略也面临挑战,最大的因素在于数据的来源。 对于互联网的公司最近的动态是什么?这个不是很难的,主要看一下公司的…

windows挂载linux网络文件系统NFS

ubuntu上安装配置nfs服务 #apt-get install nfs-kernel-server #mkdir /home/nfs #vim /etc/exports 在文档的最后一行加入/home/nfs *(rw,sync,no_root_squash,no_subtree_check),保存退出。 #/etc/init.d/rpcbind restart 重启rpcbind #/etc/init.d/nfs-kern…

SQL的连接分为三种:内连接、外连接、交叉连接。

先给出两张表:一、内连接:内连接(INNER JOIN):有两种,显式的和隐式的,返回连接表中符合连接条件和查询条件的数据行。(所谓的链接表就是数据库在做查询形成的中间表)。1、…

如何在使用摩托罗拉上的RSS阅读器应用进行一次订阅

订阅一个CSDN的RSS为例。 1、打开RSS阅读器。 2、设置->新增订阅->手动新增 订阅URL:输入http://articles.csdn.net/api/rss.php?tid1000 (可以先在PC上打开下该网页,发现他是一个xml网页。) 订阅名称:自己起一个名字&…

RTP与RTCP协议介绍

本文转自:http://blog.51cto.com/zhangjunhd/25481 1.流媒体( Streaming Media) 1.1流媒体概念 流媒体技术是网络技术和多媒体技术发展到一定阶段的产物。术语流媒体既可以指在网上传输连续时基媒体的流式技术,也可以指使用流式技术的连续时基媒体本身…

JSP学习

一、JSP 简介 什么是Java Server Pages? JSP全称Java Server Pages&#xff0c;是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。 JSP是一种Java servlet&#xff0c;主要用于实现Java web应用程序的用户界面部分。网页开发…

Java给定一个字符串数组,判断每个字符出现次数

题目要求&#xff1a;给定一个字符串&#xff0c;判断每个字符出现多少次&#xff1f; 解决思路&#xff1a;利用Map的特性&#xff1a;即Map集合中如果两个key&#xff08;键&#xff09;值是一样相同的&#xff0c;那么&#xff0c;后放&#xff08;put&#xff09;入的值会将…

Java-n个人报数

题目&#xff1a; 有n个人围成一圈&#xff0c;顺序排号。从第一个人开始报数&#xff08;从1到3报数&#xff09;&#xff0c;凡报到3的人退出圈子&#xff0c;问最后留下的是原来第几号的哪一位&#xff1f; 大概思路&#xff1a;假设有3个人&#xff0c;它们围成一圈&#x…

100个直接可以拿来用的JavaScript实用功能代码片段

http://www.cnblogs.com/wxydigua/p/3314274.html转载于:https://www.cnblogs.com/kevinge/p/3316315.html