各位用户为了找寻关于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数据库程序设计有所帮助。