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.pswp.cn/news/274047.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274047.shtml
英文地址,請注明出處:http://en.pswp.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