2013-12-13 35 views
1

我第一次使用存储过程。我创建了一个存储过程:如何处理mysql中的存储过程异常?

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

您可以定义一个变量(在本例中为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 ; 
+0

@wcwchiquito你能告诉我在哪里可以找到从头开始学习存储过程的资源吗? –

+1

@NitishHardeniya:为了从头开始学习,我建议你从官方手册开始[19.1。定义存储程序](http://dev.mysql.com/doc/refman/5.6/en/stored-programs-defining.html),你会发现很多有用的信息。 – wchiquito