mysql过程异常处理_mysql数据库存储过程异常处理
14.1.4? 定義條件和處理程序
定義條件和處理程序是事先定義程序執行過程中可能遇到的問題。并且可以在處理程序中定義解決這些問題的辦法。這種方式可以提前預測可能出現的問題, 并提出解決辦法。這樣可以增強程序處理問題的能力,避免程序異常停止。MySQL中都是通過DECLARE關鍵字來定義條件和處理程序。本小節中將詳細講 解如何定義條件和處理程序。
1.定義條件
MySQL中可以使用DECLARE關鍵字來定義條件。其基本語法如下:
DECLARE??condition_name??CONDITION??FOR??condition_value
condition_value:
SQLSTATE?[VALUE]?sqlstate_value?|?mysql_error_code
其中,condition_name參數表示條件的名稱;condition_value參數表示條件的類型;sqlstate_value參數和 mysql_error_code參數都可以表示MySQL的錯誤。例如ERROR 1146 (42S02)中,sqlstate_value值是42S02,mysql_error_code值是1146。
【示例14-6】 下面定義"ERROR 1146 (42S02)"這個錯誤,名稱為can_not_find。可以用兩種不同的方法來定義,代碼如下:
//方法一:使用sqlstate_value
DECLARE??can_not_find??CONDITION??FOR??SQLSTATE??'42S02'?;
//方法二:使用mysql_error_code
DECLARE??can_not_find??CONDITION??FOR??1146?;
2.定義處理程序
MySQL中可以使用DECLARE關鍵字來定義處理程序。其基本語法如下:
DECLARE?handler_type?HANDLER?FOR
condition_value[,...]?sp_statement
handler_type:
CONTINUE?|?EXIT?|?UNDO
condition_value:
SQLSTATE?[VALUE]?sqlstate_value?|
condition_name??|?SQLWARNING
|?NOT?FOUND??|?SQLEXCEPTION??|?mysql_error_code
其中,handler_type參數指明錯誤的處理方式,該參數有3個取值。這3個取值分別是CONTINUE、EXIT和UNDO。CONTINUE表示遇到錯誤不進行處理,繼續向下執行;EXIT表示遇到錯誤后馬上退出;UNDO表示遇到錯誤后撤回之前的操作,MySQL中暫時還不支持這種處理方式。
注意:通常情況下,執行過程中遇到錯誤應該立刻停止執行下面的語句,并且撤回前面的操作。但是,MySQL中現在還不能支持UNDO操作。因此,遇到錯誤時最好執行EXIT操作。如果事先能夠預測錯誤類型,并且進行相應的處理,那么可以執行CONTINUE操作。
condition_value參數指明錯誤類型,該參數有6個取值。sqlstate_value和mysql_error_code與條件定義中的是同一個意思。condition_name是DECLARE定義的條件名稱。SQLWARNING表示所有以01開頭的sqlstate_value值。NOT FOUND表示所有以02開頭的sqlstate_value值。SQLEXCEPTION表示所有沒有被SQLWARNING或NOT FOUND捕獲的sqlstate_value值。sp_statement表示一些存儲過程或函數的執行語句。
【示例14-7】 下面是定義處理程序的幾種方式。代碼如下:
//方法一:捕獲sqlstate_value
DECLARE?CONTINUE?HANDLER?FOR?SQLSTATE?'42S02'
SET?@info='CAN?NOT?FIND';
//方法二:捕獲mysql_error_code
DECLARE?CONTINUE?HANDLER?FOR?1146?SET?@info='CAN?NOT?FIND';
//方法三:先定義條件,然后調用
DECLARE??can_not_find??CONDITION??FOR??1146?;
DECLARE?CONTINUE?HANDLER?FOR?can_not_find?SET
@info='CAN?NOT?FIND';
//方法四:使用SQLWARNING
DECLARE?EXIT?HANDLER?FOR?SQLWARNING?SET?@info='ERROR';
//方法五:使用NOT?FOUND
DECLARE?EXIT?HANDLER?FOR?NOT?FOUND?SET?@info='CAN?NOT?FIND';
//方法六:使用SQLEXCEPTION
DECLARE?EXIT?HANDLER?FOR?SQLEXCEPTION?SET?@info='ERROR';
上述代碼是6種定義處理程序的方法。第一種方法是捕獲sqlstate_value值。如果遇到sqlstate_value值為42S02,執行CONTINUE操作,并且輸出"CAN NOT FIND"信息。第二種方法是捕獲mysql_error_code值。如果遇到mysql_error_code值為1146,執行CONTINUE操作,并且輸出"CAN NOT FIND"信息。第三種方法是先定義條件,然后再調用條件。這里先定義can_not_find條件,遇到1146錯誤就執行CONTINUE操作。第四種方法是使用SQLWARNING。SQLWARNING捕獲所有以01開頭的sqlstate_value值,然后執行EXIT操作,并且輸出"ERROR"信息。第五種方法是使用NOT FOUND。NOT FOUND捕獲所有以02開頭的sqlstate_value值,然后執行EXIT操作,并且輸出"CAN NOT FIND"信息。第六種方法是使用SQLEXCEPTION。SQLEXCEPTION捕獲所有沒有被SQLWARNING或NOT FOUND捕獲的sqlstate_value值,然后執行EXIT操作,并且輸出"ERROR"信息。
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND set _err=1;
作用是當遇到SQLEXCEPTION,SQLWARNING,NOT FOUND 錯誤時,設置_err=1并執行CONTINUE操作,即繼續執行后面的語句。
來源:http://book.51cto.com/art/201012/240978.htm
JDBC對MySQL數據庫存儲過程的調用
一.MySQL數據庫存儲過程: 1.什么是存儲過程 存儲過程(英文:Stored Procedure)是在大型數據庫系統中,為了完成特定功能而編寫的一組的SQL語句集.存儲過程經編譯存儲在數據庫中,用 ...
MySQL數據庫----存儲過程
存儲過程 存儲過程包含了一系列可執行的sql語句,存儲過程存放于MySQL中,通過調用它的名字可以執行其內部的一堆sql -- 存儲過程的優點: -- 1.程序與數據實現解耦 -- 2.減少網絡傳輸的 ...
關于MySQL數據庫存儲過程的感想
以下只是學習路上的淺薄感想,如理解有所偏差,還請有識之士指正! 一.存儲過程意義理解 關于存儲過程,我的理解是對數據庫語言進行編程調用,就像Java代碼類編程寫一個具有某種特定功能的方法去進行調用一樣 ...
MySQL數據庫存儲過程動態表建立(PREPARE)
PREPARE?statement_name?FROM?sql_text?/*定義*/ EXECUTE?statement_name?[USING?variable?[,variable...]]?/ ...
MySQL數據庫中delimiter的作用概述
以下的文章主要是向大家描述的是MySQL數據庫中delimiter的作用是什么?我們一般都認為這個命令和存儲過程關系不大,到底是不是這樣的呢?以下的文章將會給你相關的知識,望你會有所收獲. 其實就是告 ...
mysql之——存儲過程 + 游標 + 事務
下面是自己曾經編寫過的mysql數據庫存儲過程,留作存檔,以后用到的時候拿來參考. 其中,涉及到了存儲過程.游標(雙層循環).事務. [說明]:代碼中的注釋只針對當時業務而言,無須理會. 代碼如下: ...
Java開發最佳實踐(二) ——《Java開發手冊》之";異常處理、MySQL 數據庫";
二.異常日志 (一) 異常處理 (二) 日志規約 三.單元測試 四.安全規約 五.MySQL數據庫 (一) 建表規約 (二) 索引規約 (三) SQL語句 (四) ORM映射 六.工程結構 七.設計規 ...
MySql數據庫學習--存儲過程(1)
在MySQL 5中,終于引入了存儲過程這一新特性,這將大大增強MYSQL的數據庫處理能力.在本文中將指導讀者快速掌握MySQL 5的存儲過程的基本知識,帶領用戶入門. 存儲過程介紹 存儲過程是一組為了 ...
隨機推薦
Mysql統計總結 - 最近30天,昨天的數據統計
-- 最近30天的醫說發布數量SELECT substr(a.feed_publish_time,6, 5) AS '日期', count(*) AS '醫說數' FROM xm_feed a WHE ...
require.js 入門學習-備
一.為什么要用require.js? 最早的時候,所有Javascript代碼都寫在一個文件里面,只要加載這一個文件就夠了.后來,代碼越來越多,一個文件不夠了,必須分成多個文件,依次加載.下面的網頁代 ...
iOS開發——Xcode快捷鍵
1.共用的一些方法 Command + A: 全選Command + C: 復制Command + V: 粘貼Command + X: 剪切Command + Z: 撤銷Shift + Command ...
sublime-text-3設置輸入中文方法
sublime-text-3 編輯器性感而敏捷,卻讓人感慨有其長必有其短. 有些缺點都可以通過插件解決.但是要解決輸入中文問題卻很復雜,不能輸入中文實在是太痛苦了. 我在做一個有很多文字的html頁面 ...
一步一步帶你做WebApi遷移ASP.NET Core2.0
隨著ASP.NET Core 2.0發布之后,原先運行在Windows IIS中的ASP.NET WebApi站點,就可以跨平臺運行在Linux中.我們有必要先說一下ASP.NET Core. ASP ...
VsVim - Shortcut Key (快捷鍵)
Enable / Disable NuGet 中提供了禁用按鈕.另外還可以通過 Ctrl+Shift+F12 在 Visual Studio 中實現 Enable / Disable. 移動光標類命令 ...
python之面向對象篇6
一.繼承與派生 什么是繼承 繼承一種新建類的方式,新建的類稱為子類或者派生類,被繼承的類稱為父類或基類或超類 子類會遺傳父類的一系列屬性 python支持多繼承 注意: 在python3中,如果沒有顯 ...
go語言之行--數組、切片、map
一.內置函數 append :追加元素到slice里,返回修改后的slice close :關閉channel delete :從map中刪除key對應的value panic? : 用于異常處理,停 ...
如何使用URLOS進行docker應用開發
使用Docker技術可以幫助企業快速水平擴展服務,從而到達彈性部署業務的能力.在云服務概念興起之后,Docker的使用場景和范圍進一步發展,如今在微服務架構越來越流行的情況下,微服務+Docker的完 ...
Archlinux Setup AUR
方案一 pacman -Sy yaourt yaourt -Sy pacaur pacaur -Sa xxx 方案二 git clone git clone https://aur.archlinux ...
總結
以上是生活随笔為你收集整理的mysql过程异常处理_mysql数据库存储过程异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql timestamp 类型_M
- 下一篇: mysql列目录_mysql列直接存储图