我第一次使用存储过程。我创建了一个存储过程:
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
我想处理表中重复条目的异常,但是当我使用第三行时,即声明一个处理程序。插入查询是否停止工作?
怎么做?
答案 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 ;