tcbs_批量儲存過程_plsql事務_savepoint_異常
TCBS後臺的批量儲存過程中,N次看到如下的程式碼處理邏輯,
上述程式碼包含了儲存點.if程式碼塊,異常,異常後的處理程式碼
那麼我的測試要點:
1,發生異常時,會執行到儲存點嗎 2,儲存點執行後(即:rollback to 執行後),還會繼續執行後續的程式碼,還是直接退出儲存過程 3,exception異常程式碼塊,一直對於when others then的理解, others是可以捕獲所有的oracle異常嗎,這樣我就可以編寫相關的處理程式碼,不至於讓程式碼中斷了.程式碼的健壯性就增強了 |
SQL> declare
2 v_a varchar2(10);
3 begin
4 insert into log_test values(1,'zxy');
5 savepoint sp1;
6 v_a:='mv';
7 insert into other_log values(2,'zxz');
8 if v_a='mv' then
//儲存點sp1的作用,在後面執行rollback to sp1,就會儲存sp1之前程式碼所作的工作,而不會完全rollback,尤其對於金融系統,利用遊標處理若干賬號的業務情形
9 rollback to sp1;
//dbms_output僅用於除錯顯示用
10 dbms_output.put_line('開始執行rollback to之後的程式碼');
11
//在TCBS後臺的大量儲存過程中採用了多個begin exception end的程式碼塊
//以前不太懂,這樣就會增強模組化,每塊程式碼具有獨立的處理能力,再者
//處理邏輯顯得清晰
//從業務流程上看也很清楚,一環扣一環,直至流程結束
12 begin
//注:log_test表的第二列是varchar2(10)的大小,故意insert超過列大小的資料
//以測試when others then是否可以捕獲到此異常
13 insert into log_test values(88,'after rollback to');
14 exception //異常塊關鍵字 exception,而非exceptions
//採取when others then的作用就是在上述insert子句出錯,整個plsql或者
儲存過程可以繼續執行,不會導致中斷
15 when others then //在此我們只寫一種異常處理分支,當然實際情況可以有多個類似的分支
//在此我只是用關鍵字sqlerrm及sqlcode顯示insert語句具體異常的相關資訊
//sqslerrm表示oracle出錯的原因(含:文字及錯誤號),sqlcode僅是oracle錯誤號
16 dbms_output.put_line(sqlerrm||sqlcode);
//編寫如下insert into 語句,為了測試在捕獲後insert into之類的dml語句可以繼續
//執行嗎,答案是可以執行
17 --捕獲錯誤的insert語句後,修正錯誤insert語句後再次執行它
18 insert into log_test values(88,'re_after');
19 end;
20 --commit;
21 end if;
22 end;
23 /
開始執行rollback to之後的程式碼
ORA-12899: 列 "SCOTT"."LOG_TEST"."LOGMAN" 的值太大 (實際值: 17, 最大值: 10)-12899
//直接在本會話查詢log_test的記錄,發現沒有兩個記錄,就是沒有了
//insert into other_log values(2,'zxz')的相關記錄,因為程式碼塊有rollback to,這就是//它的作用
PL/SQL procedure successfully completed
SQL> select * from log_test;
SEQ LOGMAN
--------------------------------------- ----------
88 re_after
1 zxy
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-723330/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- tcbs_批量儲存過程_輸出引數out與異常的關係儲存過程
- tcbs_批量儲存過程_sql_case when_示例儲存過程SQL
- oracle plsql儲存過程_if判斷與事務commitOracleSQL儲存過程MIT
- MySQL 儲存過程中事務sql異常回滾MySql儲存過程
- 儲存過程——異常捕獲&列印異常資訊儲存過程
- oracle plsql儲存過程OracleSQL儲存過程
- MySQL 儲存過程/遊標/事務MySql儲存過程
- 儲存過程中巢狀事務儲存過程巢狀
- 關於事務的儲存過程儲存過程
- tcbs_批量儲存過程_輸入引數為空與非空的分支編寫儲存過程
- MySQL儲存過程的異常處理方法MySql儲存過程
- 不要在儲存過程中控制事務儲存過程
- MySQL儲存過程中捕獲異常的方法MySql儲存過程
- 儲存過程注意事項儲存過程
- oracle 儲存過程以及plsql語句塊Oracle儲存過程SQL
- PLSQL學習-【7儲存過程、函式】SQL儲存過程函式
- 儲存過程批量生成awr指令碼儲存過程指令碼
- 批量插入資料的儲存過程儲存過程
- MySQL 儲存過程定義條件和異常處理MySql儲存過程
- 服務端執行部署好的CLR儲存過程時出現如下異常服務端儲存過程
- oracle 儲存過程遊標中處理並記錄異常Oracle儲存過程
- oracle plsql儲存過程_運算子優先順序OracleSQL儲存過程
- Oracle儲存過程乾貨(二):PLSQL控制語句Oracle儲存過程SQL
- Oracle '批量'禁用外來鍵的儲存過程Oracle儲存過程
- [MySQL光速入門]017 儲存過程中的"異常處理"MySql儲存過程
- oracle plsql儲存過程_while loop_end loop_exitOracleSQL儲存過程WhileOOP
- Oracle儲存過程乾貨(三):PLSQL迴圈語句Oracle儲存過程SQL
- sqlserver 異常 事務SQLServer
- 編寫儲存過程基本注意事項儲存過程
- job呼叫儲存過程的注意事項儲存過程
- 【MySQL】MySQL(三)儲存過程和函式、觸發器、事務MySql儲存過程函式觸發器
- 儲存過程、觸發器與事務之間的關係儲存過程觸發器
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- (interbase之九)intebase的儲存過程、觸發器以及事件、異常 (轉)儲存過程觸發器事件
- 儲存過程儲存過程
- oracle plsql儲存過程除錯出錯_PLS-00361OracleSQL儲存過程除錯
- 建立儲存過程小提示tip_plsql_小經驗儲存過程SQL
- mssql sqlserver 批量刪除所有儲存過程的方法分享SQLServer儲存過程