时间:2021-07-01 10:21:17 帮助过:4人阅读
- 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 ;
以上就是 Mysql系列(十一)异常处理的内容,更多相关内容请关注PHP中文网(www.gxlcms.com)!