群里有人询问,在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)
咋样满足需求了吧!

最新文章

  1. Android自定义控件之自定义ViewGroup实现标签云
  2. Fragment中调用Activity的UI
  3. 背景图片background-size兼容ie8以下浏览器解决
  4. sql server获取当前日期
  5. centos 6.5 安装weixin
  6. 中国大学MOOC-翁恺-C语言程序设计习题集
  7. QT LNK2019 无法解析的外部符号
  8. haxe 配置
  9. python3编码问题终结者--还搞不懂你来找我
  10. 小实例---关于input宽度自适应以及多个input框合并拆分
  11. nginx中location匹配顺序
  12. day02 while循环 运算符 格式化输出 编码
  13. Python学习笔记,day2
  14. Android开发的插件Code Generator与LayoutCreator的安装与使用,提升你的开发效率
  15. js scroll函数
  16. Java SSH远程执行Shell命令、shell脚本实现(Ganymed SSH)
  17. Java创建WebService
  18. mysql表结构的查询与修改
  19. Unity3d- 资源
  20. SpringBoot2 web

热门文章

  1. HDU 2544 最短路(模板题)
  2. java基础知识回顾之java Thread类学习(七)--java多线程安全问题(死锁)
  3. ZOJ 1642 Match for Bonus (DP)
  4. Spark安装部署
  5. TCL语言笔记:TCL基础语法
  6. Hibernate逍遥游记-第4章映射对象标识符-increment、identity、hilo、native、assigned、sequence、&lt;meta&gt;
  7. linux下操作PostgreSQL的常用命令
  8. linux下对符合条件的文件大小做汇总统计的简单命令
  9. word引用错误
  10. windows线程同步