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

所属分类: 数据库 / Mysql 阅读数: 128
收藏 0 赞 0 分享

本文实例讲述了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中distinct和count(*)的使用方法比较

这篇文章主要针对MySQL中distinct和count(*)的使用方法比较,对两者之间的使用方法、效率进行了详细分析,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Mysql命令大全(完整版)

这篇文章主要介绍了Mysql命令大全,分享的命令都是最基本的,推荐给大家,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Mysql常用命令汇总

这篇文章主要介绍了Mysql常用命令,都是mysql数据库日常最基本的操作命令,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

MySQL最基本的命令使用汇总

这篇文章为大家分享了MySQL最基本的命令使用汇总,MySQL最基本的命令使用,包括如何正确连接MySQL(和PHP搭配之最佳组合),修改密码与增加新用户等相关内容的描述,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

mysql命令行如何操作

这篇文章主要介绍了mysql命令行如何操作,还为大家分享了mysql添加环境变量的方法,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

MySQL常用命令 MySQL处理数据库和表的命令

这篇文章主要介绍了MySQL常用命令,尤其是针对MySQL处理数据库和表的命令进行学习,特别适用于新手,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Mysql基础入门 轻松学习Mysql命令

这篇文章主要是Mysql基础入门教程,教大家如何轻松学习Mysql命令,并熟练掌握Mysql命令,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

解决Mysql服务器启动时报错问题的方法

这篇文章主要介绍了解决Mysql服务器启动时报错问题的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

MySql命令实例汇总

这篇文章主要介绍了MySql命令,结合实例分析了MySQL数据库的创建、连接及增删改查等各种常用操作的使用方法与相关注意事项,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Linux下实现MySQL数据备份和恢复的命令使用全攻略

这篇文章主要介绍了Linux下实现MySQL数据备份和恢复的命令使用全攻略,包括使用Mysqldump和LVM快照以及xtrabackup三种方法,倾力推荐!需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多