欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

mysql存储过程获取sqlstate message_text

发布时间:2025/6/17 数据库 53 豆豆
生活随笔 收集整理的这篇文章主要介绍了 mysql存储过程获取sqlstate message_text 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

群里有人询问,在mysql的proc中如何获取错误信息、错误编号呢?我们知道在oracle、mssql中比较简单;

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(当然错误信息错误编号可以自己定义) --参考我的另外一个示例 ------------------------------ 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';/*输出错误信息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 ;  --模拟了一个不存在的表错误 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 |  --看到了吧错误信息打印出来了 +-------------------------------------+ 1 row in set (0.99 sec) Query OK, 0 rows affected (0.99 sec) 咋样满足需求了吧!

转载于:https://www.cnblogs.com/duanxz/p/3566263.html

总结

以上是生活随笔为你收集整理的mysql存储过程获取sqlstate message_text的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。