日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

mysql定义条件和处理_MySQL定义条件和处理程序

發布時間:2023/11/27 生活经验 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql定义条件和处理_MySQL定义条件和处理程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在程序的運行過程中可能會遇到問題,此時我們可以通過定義條件和處理程序來事先定義這些問題。

定義條件是指事先定義程序執行過程中遇到的問題,處理程序定義了在遇到這些問題時應當采取的處理方式和解決辦法,保證存儲過程和函數在遇到警告或錯誤時能繼續執行,從而增強程序處理問題的能力,避免程序出現異常被停止執行。

下面將詳細講解如何定義條件和處理程序。

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 的錯誤。sqlstate_value 表示長度為 5 的字符串類型錯誤代碼,mysql_error_code 表示數值類型錯誤代碼。例如 ERROR 1146(42S02) 中,sqlstate_value 值是 42S02,mysql_error_code 值是 1146。

例 1

下面定義“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 操作。

參數指明錯誤類型,該參數有 6 個取值:

sqlstate_value:包含 5 個字符的字符串錯誤值;

condition_name:表示 DECLARE 定義的錯誤條件名稱;

SQLWARNING:匹配所有以 01 開頭的 sqlstate_value 值;

NOT FOUND:匹配所有以 02 開頭的 sqlstate_value 值;

SQLEXCEPTION:匹配所有沒有被 SQLWARNING 或 NOT FOUND 捕獲的 sqlstate_value 值;

mysql_error_code:匹配數值類型錯誤代碼。

sp_statement 參數為程序語句段,表示在遇到定義的錯誤時,需要執行的一些存儲過程或函數。

例 2

下面是定義處理程序的幾種方式,代碼如下:

//方法一:捕獲 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”信息。

例 3

定義條件和處理順序,具體的執行過程如下:

mysql> CREATE TABLE t8(s1 INT,PRIMARY KEY(s1));

Query OK,0 rows affected (0.07 sec)

mysql> DELIMITER //

mysql> CREATE PROCEDURE handlerdemo()

-> BEGIN

-> DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @X2=1;

-> SET @X=1;

-> INSERT INTO t8 VALUES(1);

-> SET @X=2;

-> INSERT INTO t8 VALUES(1);

-> SET @X=3;

-> END //

Query OK,0 rows affected (0.02 sec)

mysql> DELIMITER ;

mysql> CALL handlerdemo();

Query OK,0 rows affected (0.01 sec)

mysql> SELECT @X;

+------+

| @X |

+------+

| 3 |

+------+

1 row in set (0.00 sec)

上述代碼中,@X 是一個用戶變量,執行結果 @X 等于 3,這表明 MySQL 執行到程序的末尾。

如果DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @X2=1;這一行不存在,第二個 INSERT 因 PRIMARY KEY 約束而失敗之后,MySQL 可能已經采取 EXIT 策略,且 SELECT?@X 可能已經返回 2。

注意:@X 表示用戶變量,使用 SET 語句為其賦值,用戶變量與連接有關,一個客戶端定義的變量不能被其他客戶端所使用,當客戶端退出時,該客戶端連接的所有變量將自動釋放。

總結

以上是生活随笔為你收集整理的mysql定义条件和处理_MySQL定义条件和处理程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。