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

 更新时间:2015年07月20日 17:39:54   作者:鉴客  
这篇文章主要介绍了MySQL存储过程的异常处理方法,可实现有效调试MySQL存储过程处理结果的功能,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了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数据库程序设计有所帮助。

相关文章

  • linux下mysql提示"mysql deamon failed to start"错误的解决方法

    linux下mysql提示"mysql deamon failed to start"错误的解决方法

    网站突然连接不上数据库,于是朋友直接重启了一下服务器。进到cli模式下,执行 service myqsld start 发现还是提示"mysql deamon failed to start"错误信息
    2013-04-04
  • MySQL slow_log表无法修改成innodb引擎详解

    MySQL slow_log表无法修改成innodb引擎详解

    这篇文章主要给大家介绍了关于MySQL slow_log表无法修改成innodb引擎的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • Windows7下如何在命令行使用MySQL

    Windows7下如何在命令行使用MySQL

    这篇文章主要介绍了Windows7下如何在命令行使用MySQL的相关资料,需要的朋友可以参考下
    2015-12-12
  • 查询MySQL安装路径的两种方法

    查询MySQL安装路径的两种方法

    这篇文章主要给大家介绍了关于查询MySQL安装路径的两种方法,在使用MySQL时有时需要知道MySQL的安装路径才能进行相关操作,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • 全面详解MySQL单行函数分析

    全面详解MySQL单行函数分析

    MySQL常见的函数分为单行函数和分组函数,单行函数包含字符函数、数学函数、日期函数、流程控制函数等,下面就详细的来介绍一下MySQL单行函数
    2023-10-10
  • MySQL分页技术、6种分页方法总结

    MySQL分页技术、6种分页方法总结

    这篇文章主要介绍了MySQL分页技术、6种分页方法总结,本文总结了6种分页的方法并分别一一讲解它们的特点,需要的朋友可以参考下
    2015-07-07
  • 一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的

    一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的

    聚簇索引不是一种单独的索引类型,而是一种数据存储方式。innodb的聚簇索引实际上在同一个结构中保存了B-tree索引和数据行。通过本文学习MySQL的聚簇索引及聚簇索引是如何长高的,感兴趣的朋友一起学习下吧
    2021-05-05
  • MySQL中的case when中对于NULL值判断的坑及解决

    MySQL中的case when中对于NULL值判断的坑及解决

    这篇文章主要介绍了MySQL中的case when中对于NULL值判断的坑及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • mysql 5.7.12 winx64安装配置方法图文教程

    mysql 5.7.12 winx64安装配置方法图文教程

    这篇文章主要为大家分享了mysql 5.7.12winx64安装配置方法图文教程,感兴趣的朋友可以参考一下
    2016-05-05
  • 分享下mysql各个主要版本之间的差异

    分享下mysql各个主要版本之间的差异

    因为mysql的版本较多,而且又被oracle公司收购,所有很多朋友不是很清楚各个版本的区别,这里简单介绍下,方便需要的朋友
    2013-06-06

最新评论