当前位置:Gxlcms > mysql > Mysql系列(十一)异常处理

Mysql系列(十一)异常处理

时间:2021-07-01 10:21:17 帮助过:4人阅读

Mysql系列(十一)异常处理

  1. DROP PROCEDURE IF EXISTS `SP_MODEL`;
  2. DELIMITER ;;
  3. CREATE PROCEDURE `SP_MODEL`(IN V_TYPE INT)
  4. BEGIN
  5. /**********存储过程模版,结合了·返回自定义错误信息·错误退出··事物回滚·的功能***********/
  6. DECLARE V_TEST INT DEFAULT 0;
  7. DECLARE V_ERR_NO INT DEFAULT 0;
  8. DECLARE V_ERR_MSG VARCHAR(100) DEFAULT '执行成功';
  9. DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND SET V_ERR_NO=1;
  10. -- CREATE TABLE `test_error` (
  11. -- `a` int(11) NOT NULL,
  12. -- `b` int(11) DEFAULT NULL,
  13. -- PRIMARY KEY (`a`)
  14. -- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  15. -- TRUNCATE TABLE TEST_ERROR;
  16. -- CALL SP_MODEL(1);
  17. -- SELECT * FROM TEST_ERROR;
  18. START TRANSACTION;
  19. Label:-- 执行过程中出现错误则跳出此Label
  20. BEGIN
  21. IF V_TYPE=1 THEN
  22. INSERT INTO TEST_ERROR(a,b) VALUES(1,1);
  23. INSERT INTO TEST_ERROR(a,b) VALUES(1,1);
  24. IF V_ERR_NO=1 THEN
  25. SET V_ERR_MSG='您已经插过啦,别再重复插~';
  26. -- LEAVE Label;
  27. END IF;
  28. SET V_TEST=1;
  29. INSERT INTO TEST_ERROR(a,b) VALUES(3,'a');
  30. IF V_ERR_NO=1 THEN
  31. SET V_ERR_MSG='尺寸不对,插不进来~';
  32. LEAVE Label;
  33. END IF;
  34. INSERT INTO TEST_ERROR(a,b) VALUES(4,1);
  35. SET V_TEST=2;
  36. ELSE
  37. SET V_ERR_MSG='传入参数V_TYPE不正确';
  38. SET V_ERR_NO=1; -- 直接设置此变量值为1,主动抛出异常
  39. LEAVE Label;
  40. END IF;
  41. END Label;
  42. IF V_ERR_NO=1 THEN
  43. ROLLBACK;
  44. ELSE
  45. COMMIT;
  46. END IF;
  47. SELECT V_ERR_NO AS ERR_NO,V_ERR_MSG AS ERR_MSG, V_TEST AS TEST; -- 返回执行结果
  48. END
  49. ;;
  50. DELIMITER ;

以上就是 Mysql系列(十一)异常处理的内容,更多相关内容请关注PHP中文网(www.gxlcms.com)!

人气教程排行