關於MySQL預存程序異常處理的一點心得

來源:互聯網
上載者:User

標籤:結合   and   handle   tin   from   type   table   except   trunc   

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預存程序異常處理的一點心得

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.