关于MySQL存储过程异常处理的一点心得

2018-06-17 23:09:28来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

DROP PROCEDURE IF EXISTS `SP_MODEL`;

DELIMITER ;;
CREATE PROCEDURE `SP_MODEL`(IN V_TYPE INT)
BEGIN
/**********存储过程模版,结合了·返回自定义错误信息·错误退出··事物回滚·的功能***********/
DECLARE V_TEST INT DEFAULT 0;

DECLARE V_ERR_NO INT DEFAULT 0;
DECLARE V_ERR_MSG VARCHAR(100) DEFAULT '执行成功';
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND SET V_ERR_NO=1;

-- CREATE TABLE `test_error` (
-- `a` int(11) NOT NULL,
-- `b` int(11) DEFAULT NULL,
-- PRIMARY KEY (`a`)
-- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- TRUNCATE TABLE TEST_ERROR;
-- CALL SP_MODEL(1);
-- SELECT * FROM TEST_ERROR;

START TRANSACTION;

Label:-- 执行过程中出现错误则跳出此Label
BEGIN

IF V_TYPE=1 THEN
INSERT INTO TEST_ERROR(a,b) VALUES(1,1);
INSERT INTO TEST_ERROR(a,b) VALUES(1,1);

IF V_ERR_NO=1 THEN
SET V_ERR_MSG='您已经插过啦,别再重复插~';
-- LEAVE Label;
END IF;

SET V_TEST=1;

INSERT INTO TEST_ERROR(a,b) VALUES(3,'a');
IF V_ERR_NO=1 THEN
SET V_ERR_MSG='尺寸不对,插不进来~';
LEAVE Label;
END IF;

INSERT INTO TEST_ERROR(a,b) VALUES(4,1);

SET V_TEST=2;

ELSE
SET V_ERR_MSG='传入参数V_TYPE不正确';
SET V_ERR_NO=1; -- 直接设置此变量值为1,主动抛出异常
LEAVE Label;
END IF;

END Label;

IF V_ERR_NO=1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;

SELECT V_ERR_NO AS ERR_NO,V_ERR_MSG AS ERR_MSG, V_TEST AS TEST; -- 返回执行结果
END

;;

DELIMITER ;

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:数据库完整性

下一篇:mysql-5.6.14-win32为免安装解压缩版