MySQL存储过程的异常处理方法

 更新时间:2015年07月20日 17:39:54   作者:鉴客  
这篇文章主要介绍了MySQL存储过程的异常处理方法,可实现有效调试MySQL存储过程处理结果的功能,具有一定参考借鉴价值,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

本文实例讲述了MySQL存储过程的异常处理方法。分享给大家供大家参考。具体如下:

mysql>
mysql> delimiter $$
mysql>
mysql> CREATE PROCEDURE myProc
  ->   (p_first_name     VARCHAR(30),
  ->    p_last_name      VARCHAR(30),
  ->    p_city        VARCHAR(30),
  ->    p_description     VARCHAR(30),
  ->    OUT p_sqlcode     INT,
  ->    OUT p_status_message VARCHAR(100))
  -> BEGIN
  ->
  -> /* START Declare Conditions */
  ->
  ->  DECLARE duplicate_key CONDITION FOR 1062;
  ->  DECLARE foreign_key_violated CONDITION FOR 1216;
  ->
  -> /* END Declare Conditions */
  ->
  -> /* START Declare variables and cursors */
  ->
  ->   DECLARE l_manager_id    INT;
  ->
  ->   DECLARE csr_mgr_id CURSOR FOR
  ->    SELECT id
  ->     FROM employee
  ->    WHERE first_name=p_first_name
  ->       AND last_name=p_last_name;
  ->
  -> /* END Declare variables and cursors */
  ->
  -> /* START Declare Exception Handlers */
  ->
  ->  DECLARE CONTINUE HANDLER FOR duplicate_key
  ->   BEGIN
  ->    SET p_sqlcode=1052;
  ->    SET p_status_message='Duplicate key error';
  ->   END;
  ->
  ->  DECLARE CONTINUE HANDLER FOR foreign_key_violated
  ->   BEGIN
  ->    SET p_sqlcode=1216;
  ->    SET p_status_message='Foreign key violated';
  ->   END;
  ->
  ->  DECLARE CONTINUE HANDLER FOR not FOUND
  ->   BEGIN
  ->    SET p_sqlcode=1329;
  ->    SET p_status_message='No record found';
  ->   END;
  ->
  -> /* END Declare Exception Handlers */
  ->
  -> /* START Execution */
  ->
  ->  SET p_sqlcode=0;
  ->  OPEN csr_mgr_id;
  ->  FETCH csr_mgr_id INTO l_manager_id;
  ->
  ->  IF p_sqlcode<>0 THEN      /* Failed to get manager id*/
  ->   SET p_status_message=CONCAT(p_status_message,' when fetching manager id');
  ->  ELSE
  ->   INSERT INTO employee (first_name,id,city)
  ->   VALUES(p_first_name,l_manager_id,p_city);
  ->
  ->   IF p_sqlcode<>0 THEN   /* Failed to insert new department */
  ->    SET p_status_message=CONCAT(p_status_message,
  ->              ' when inserting new department');
  ->   END IF;
  ->  END IF;
  ->
  ->  CLOSE csr_mgr_id;
  ->
  -> /* END Execution */
  ->
  -> END$$
Query OK, 0 rows affected (0.02 sec)
mysql>
mysql> delimiter ;
mysql> set @myCode = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> set @myMessage = 0;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> call myProc('Jason','Martin','New City','New Description',@myCode,@myMessage);
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> select @myCode, @myMessage;
+---------+------------+
| @myCode | @myMessage |
+---------+------------+
| 0    | NULL    |
+---------+------------+
1 row in set (0.00 sec)
mysql>
mysql> drop procedure myProc;
Query OK, 0 rows affected (0.00 sec)

希望本文所述对大家的MySQL数据库程序设计有所帮助。

相关文章

  • 详解MySQL的数据行和行溢出机制

    详解MySQL的数据行和行溢出机制

    在前面的文章中,白日梦曾不止一次的提及到:InnoDB从磁盘中读取数据的最小单位是数据页。 而你想得到的id = xxx的数据,就是这个数据页众多行中的一行。 这篇文章我们就一起来看一下数据行设计的多么巧妙。
    2020-11-11
  • 常见的十种SQL语句性能优化策略详解

    常见的十种SQL语句性能优化策略详解

    这篇文章主要介绍了常见的十种SQL语句性能优化策略详解,SQL语句性能优化是提高数据库查询效率的关键步骤,可以减少查询时间,提高系统响应速度,本文将介绍一些常见的SQL语句性能优化技巧,包括索引的使用、合理的查询条件、避免全表扫描等,需要的朋友可以参考下
    2023-10-10
  • MySQL?账号密码错误终极解决方法

    MySQL?账号密码错误终极解决方法

    这篇文章主要介绍了MySQL?账号密码错误终极解决方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • mysql8.0.14.zip安装时自动创建data文件夹失败服务无法启动

    mysql8.0.14.zip安装时自动创建data文件夹失败服务无法启动

    这篇文章主要介绍了mysql8.0.14.zip安装时自动创建data文件夹失败,导致服务无法启动的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • MySQL数据库查询排序方式

    MySQL数据库查询排序方式

    这篇文章主要介绍了MySQL数据库查询排序方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • mysql如何取分组之后最新的数据

    mysql如何取分组之后最新的数据

    开发中经常会遇到,分组查询最新数据的问题,下面这篇文章主要给大家介绍了关于mysql如何取分组之后最新的数据的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Mac OS系统下mysql 5.7.20安装教程图文详解

    Mac OS系统下mysql 5.7.20安装教程图文详解

    这篇文章主要介绍了Mac OS系统下mysql 5.7.20安装教程图文详解,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2017-11-11
  • MySql?update语句的详细用法

    MySql?update语句的详细用法

    这篇文章主要给大家介绍了关于MySql?update语句的详细用法,Update 是SQL中用于更新表格中已有记录的命令,通过使用Update命令,您可以更新表格中的一行或多行记录,并根据需要更改它们的值,需要的朋友可以参考下
    2023-11-11
  • pt-kill 常用杀进程参数介绍

    pt-kill 常用杀进程参数介绍

    这篇文章主要介绍了pt-kill 常用杀进程参数介绍,需要的朋友可以参考下
    2016-04-04
  • MySQL完整性约束的定义与实例教程

    MySQL完整性约束的定义与实例教程

    数据完整性约束是对关系性模型完整性规则做某种约束条件,这篇文章主要给大家介绍了关于MySQL完整性约束的相关资料,需要的朋友可以参考下
    2021-05-05

最新评论

?


http://www.vxiaotou.com