【问题标题】:How to handle exception in stored procedure in mysql?如何处理mysql中存储过程中的异常?
【发布时间】:2013-12-13 13:18:24
【问题描述】:

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

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

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

如何做到这一点?

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案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 ;
    

    【讨论】:

    • @wcwchiquito 你能告诉我在哪里可以找到从零开始学习 mysql 存储过程的资源吗?
    • @NitishHardeniya:要从零开始学习,我建议你从官方手册19.1. Defining Stored Programs开始,那里会有很多有用的信息。
    猜你喜欢
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2010-11-16
    • 1970-01-01
    相关资源
    最近更新 更多