服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - MySQL存储过程的异常处理方法

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

2020-05-15 15:30鉴客 Mysql

这篇文章主要介绍了MySQL存储过程的异常处理方法,可实现有效调试MySQL存储过程处理结果的功能,具有一定参考借鉴价值,需要的朋友可以参考下

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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数据库程序设计有所帮助。

延伸 · 阅读

精彩推荐
  • MysqlMySQL数据库varchar的限制规则说明

    MySQL数据库varchar的限制规则说明

    本文我们主要介绍了MySQL数据库中varchar的限制规则,并以一个实际的例子对限制规则进行了说明,希望能够对您有所帮助。 ...

    mysql技术网4192019-11-23
  • MysqlERROR: Error in Log_event::read_log_event()

    ERROR: Error in Log_event::read_log_event()

    ERROR: Error in Log_event::read_log_event(): read error, data_len: 438, event_type: 2 ...

    MYSQL教程网6402020-03-13
  • Mysql浅谈mysql 树形结构表设计与优化

    浅谈mysql 树形结构表设计与优化

    在诸多的管理类,办公类等系统中,树形结构展示随处可见,本文主要介绍了mysql 树形结构表设计与优化,具有一定的参考价值,感兴趣的小伙伴们可以参...

    小码农叔叔5242021-11-16
  • Mysqlmysql 不能插入中文问题

    mysql 不能插入中文问题

    当向mysql5.5插入中文时,会出现类似错误 ERROR 1366 (HY000): Incorrect string value: '\xD6\xD0\xCE\xC4' for column ...

    MYSQL教程网5722019-11-25
  • MysqlMySQL 数据备份与还原的示例代码

    MySQL 数据备份与还原的示例代码

    这篇文章主要介绍了MySQL 数据备份与还原的相关知识,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    逆心2962019-06-23
  • Mysql详解MySQL中的分组查询与连接查询语句

    详解MySQL中的分组查询与连接查询语句

    这篇文章主要介绍了MySQL中的分组查询与连接查询语句,同时还介绍了一些统计函数的用法,需要的朋友可以参考下 ...

    GALAXY_ZMY5432020-06-03
  • Mysql解决MySQl查询不区分大小写的方法讲解

    解决MySQl查询不区分大小写的方法讲解

    今天小编就为大家分享一篇关于解决MySQl查询不区分大小写的方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起...

    Veir_dev5592019-06-25
  • MysqlMySQL锁的知识点总结

    MySQL锁的知识点总结

    在本篇文章里小编给大家整理了关于MySQL锁的知识点总结以及实例内容,需要的朋友们学习下。...

    别人放弃我坚持吖4362020-12-14