Mysql系列(十一)异常处理

 mysql系列(十一)异常处理

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.php.cn)!

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享