91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL 5.5新增SIGNAL異常處理怎么用

發布時間:2022-01-14 17:15:43 來源:億速云 閱讀:171 作者:小新 欄目:數據庫

這篇文章主要介紹MySQL 5.5新增SIGNAL異常處理怎么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

MySQL 5.5新增SIGNAL異常處理
 
MySQL 從 5.0 開始支持存儲過程,到現在最新版本5.5 已經好幾個年頭了。 雖然MYSQL的異常處理不是很完善,但是處理大多數的應用還是足夠了。
異常處理的語句有如下幾種:
1. DECLARE ... CONDITION.
2. DECLARE ... HANDLER.
3. RESIGNAL.
4. SIGNAL.
 
第一種,名為條件聲明。
DECLARE condition_name CONDITION FOR condition_value
 
這里condition_name 為標準的變量命名, condition_value 為SQLSTATE 值 或者 MySQL 自身的ERROR CODE.
單獨的condition 語句不能直接運行。 只能作為第二種的一部分。
  www.2cto.com  
第二種, 名為條件處理。
第一種聲明好了,接下來自然要做相應的處理。
DECLARE handler_action HANDLER
    FOR condition_value [, condition_value] ...
    statement
 
handler_action:
    CONTINUE
  | EXIT
  | UNDO
 
condition_value:
    mysql_error_code
  | SQLSTATE [VALUE] sqlstate_value
  | condition_name
  | SQLWARNING
  | NOT FOUND
  | SQLEXCEPTION
 
handler_action 代表處理的動作,目前有效的有兩種, 繼續和直接退出。
condition_value 有好幾種,其中包括前面條件聲明里的SQLSTATE, MYSQL EEROR CODE, condition_name 以及范圍混淆的其他兩種
SQLWARNING,SQLEXCEPTION. NOT FOUND表示任何不存在的WARNING或者ERROR。
 
第三種, 代表偽裝系統的錯誤信息以及代碼,刷新當前警告緩沖區域。
RESIGNAL [condition_value]
    [SET signal_information_item
    [, signal_information_item] ...]
 
condition_value:
    SQLSTATE [VALUE] sqlstate_value
  | condition_name
 
signal_information_item:
    condition_information_item_name = simple_value_specification
 
condition_information_item_name:
    CLASS_ORIGIN
  | SUBCLASS_ORIGIN
  | MESSAGE_TEXT
  | MYSQL_ERRNO
  | CONSTRAINT_CATALOG
  | CONSTRAINT_SCHEMA
  | CONSTRAINT_NAME
  | CATALOG_NAME
  | SCHEMA_NAME
  | TABLE_NAME
  | COLUMN_NAME
  | CURSOR_NAME
 
特別注意的是可以偽裝的具體東西很多,包括錯誤代碼(MYSQL自身的東東),錯誤內容,錯誤的名,表名,列名等等。
 
第四種,SIGNAL和RESIGNAL差別不大,我們記住signal 不能單獨運行,resignal可以單獨運行。
SIGNAL condition_value
    [SET signal_information_item
    [, signal_information_item] ...]
 
condition_value:
    SQLSTATE [VALUE] sqlstate_value
  | condition_name
 
signal_information_item:
    condition_information_item_name = simple_value_specification
 
condition_information_item_name:
    CLASS_ORIGIN
  | SUBCLASS_ORIGIN
  | MESSAGE_TEXT
  | MYSQL_ERRNO
  | CONSTRAINT_CATALOG
  | CONSTRAINT_SCHEMA
  | CONSTRAINT_NAME
  | CATALOG_NAME
  | SCHEMA_NAME
  | TABLE_NAME
  | COLUMN_NAME
  | CURSOR_NAME
 
我們現在給幾個例子。
 
不用RESIGNAL/SIGNAL。
[sql] 
DELIMITER $$  
  
USE `t_girl`$$  
  
DROP PROCEDURE IF EXISTS `sp_signal1`$$  
  
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_signal1`(  
    IN f_id INT  
    )  
BEGIN  
      DECLARE con1 TINYINT DEFAULT 0;  
      DECLARE con1 CONDITION FOR SQLSTATE '23000';  
      DECLARE CONTINUE HANDLER FOR con1  
      BEGIN  
        SELECT 'Error Code : 22\r\nDuplicated!';  
      END;  
      INSERT INTO user_info VALUES (f_id);  
    END$$  
  
DELIMITER ;  
 
CALL sp_signal1(12);
 
query result
 
result
Error Code : 22
Duplicated!
 
用RESIGNAL/SIGNAL 重刷當前錯誤診斷區域。
 
[sql] 
DELIMITER $$  
  
    www.2cto.com  
USE `t_girl`$$  
  
  
DROP PROCEDURE IF EXISTS `sp_signal1`$$  
  
  
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_signal1`(  
    IN f_id INT  
    )  
BEGIN  
      DECLARE con1 TINYINT DEFAULT 0;  
      DECLARE con1 CONDITION FOR SQLSTATE '23000';  
      DECLARE CONTINUE HANDLER FOR con1  
      BEGIN  
        resignal SET schema_name = 'action',   
             table_name = 'action_tb',   
             message_text = 'Duplicated!',  
                     _errno = 22;  
/*         
    signal con1 SET schema_name = 'action',   
             table_name = 'action_tb',   
             message_text = 'Duplicated!',  
                     mysql_errno = 22;  
    www.2cto.com  
  
*/  
      END;  
      INSERT INTO user_info VALUES (f_id);  
    END$$  
  
DELIMITER ;  
 
CALL sp_signal1(12);
  www.2cto.com  
Query : call sp_signal1(12)
Error Code : 22
Duplicated!
Execution Time : 00:00:00:000
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:000
 
 

以上是“MySQL 5.5新增SIGNAL異常處理怎么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长沙市| 龙胜| 武汉市| 澜沧| 洞口县| 潞城市| 拜泉县| 称多县| 探索| 商水县| 基隆市| 桐柏县| 同仁县| 双峰县| 灵寿县| 黎平县| 清河县| 宜昌市| 东源县| 前郭尔| 建湖县| 临海市| 台南市| 朝阳市| 玉溪市| 武清区| 西青区| 景泰县| 松桃| 漳浦县| 永安市| 洛南县| 普定县| 双桥区| 南涧| 大化| 华安县| 措美县| 白山市| 澎湖县| 大宁县|