MySQL 存储过程的异常处理

前端之家收集整理的这篇文章主要介绍了MySQL 存储过程的异常处理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

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)

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

猜你在找的MySQL相关文章