mysql存储过程获取sqlstate message_text
生活随笔
收集整理的這篇文章主要介紹了
mysql存储过程获取sqlstate message_text
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
群里有人詢問,在mysql的proc中如何獲取錯(cuò)誤信息、錯(cuò)誤編號(hào)呢?我們知道在oracle、mssql中比較簡(jiǎn)單;
oracle中sqlcode,sqlerrm ;mssql中ERROR_PROCEDURE(), ERROR_MESSAGE(); 那么在mysql中呢? 下面給出示例: mysql> show create procedure proc_6\G *************************** 1. row *************************** Procedure: proc_6 sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION Create Procedure: CREATE DEFINER=`root`@`192.168.6.%` PROCEDURE `proc_6`() LANGUAGE SQL begin DECLARE code CHAR(5) DEFAULT '00000'; DECLARE msg TEXT; declare pout double; DECLARE continue HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1?--通過GET DIAGNOSTICS這樣的方式獲取sqlstate message_text(當(dāng)然錯(cuò)誤信息錯(cuò)誤編號(hào)可以自己定義) --參考我的另外一個(gè)示例 ------------------------------ drop FUNCTION if exists test.fn_get_random_str; ? create function fn_get_random_str(f_len int) returns varchar(4000) no sql? begin? ? declare v_str varchar(52); ? declare v_cnt int; ? declare f_result varchar(4000); ? /*自定義異常編碼40001:value_to_large*/ ? declare value_to_large condition for sqlstate '40001'; ?? ? if f_len>4000 then? ? ? begin? ? ? ? signal sqlstate '40001' ? ? ? set message_text='value_to_large';/*輸出錯(cuò)誤信息40001:value_to_large*/ ? ? end ; ? end if ; ?? ? set v_str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; ? set v_cnt=1; ? set f_result=''; ?? ? while v_cnt<=f_len do ? ? set f_result=concat(substr(v_str,round(rand()*52,0),1),f_result); ? ? set v_cnt=v_cnt+1; ? end while ; ?? ? return f_result ; ?? end ; ? mysql> select fn_get_random_str(5000); ERROR 1644 (40001): value_to_large ------------------------------ code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT; END; /*set pout= 1/0;*/ select 1/0 into pout from test.ttt ;??--模擬了一個(gè)不存在的表錯(cuò)誤 select concat(code,msg) ; end character_set_client: utf8 collation_connection: utf8_general_ci Database Collation: latin1_swedish_ci 1 row in set (0.28 sec) mysql> call test.proc_6(); +-------------------------------------+ | concat(code,msg) ? ? ? ? ? ? ? ? ? ?| +-------------------------------------+ | 42S02Table 'test.ttt' doesn't exist | ?--看到了吧錯(cuò)誤信息打印出來了 +-------------------------------------+ 1 row in set (0.99 sec) Query OK, 0 rows affected (0.99 sec) 咋樣滿足需求了吧!轉(zhuǎn)載于:https://www.cnblogs.com/duanxz/p/3566263.html
總結(jié)
以上是生活随笔為你收集整理的mysql存储过程获取sqlstate message_text的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解析xml的问题未解决
- 下一篇: Oracle同义词创建及其作用(转载)