如何在mysql中处理存储过程中的异常?

时间:2013-12-13 13:18:25

标签: mysql stored-procedures

我第一次使用存储过程。我创建了一个存储过程:

CREATE PROCEDURE InsertDetails(IN userID INT, IN uname VARCHAR(40), OUT lid INT)  
BEGIN  
   DECLARE CONTINUE HANDLER FOR SQLSTATE '23000'  

   INSERT INTO store_test(userid, name) 
   VALUES (userID, uname);  

   SET lid = LAST_INSERT_ID();  
END

我想处理表中重复条目的异常,但是当我使用第三行时,即声明一个处理程序。插入查询是否停止工作?

怎么做?

1 个答案:

答案 0 :(得分:1)

您可以定义变量(在此示例中为ERROR_ER_DUP_KEY)以确定是否发生错误。

根据您的MySQL版本,也可以使用13.6.7.5. SIGNAL Syntax

DELIMITER $$

DROP PROCEDURE IF EXISTS `InsertDetails`$$

CREATE PROCEDURE `InsertDetails`(`puserID` INT, `uname` VARCHAR(40), OUT `lid` INT)
BEGIN
    DECLARE `ERROR_ER_DUP_KEY` TINYINT(1) DEFAULT 0;
    DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET `ERROR_ER_DUP_KEY` := 1;
    INSERT INTO `store_test`(`userid`, `name`) VALUES (`puserID`, `uname`);
    IF (`ERROR_ER_DUP_KEY` = 0) THEN
        SET `lid` := LAST_INSERT_ID();
    END IF;
END$$

DELIMITER ;