2013-12-13 34 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