如何处理基本MySQL存储过程中的错误?

时间:2013-10-21 21:37:45

标签: mysql sql stored-procedures

假设我有一个存储过程:

DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE `SetupBlocks`(

    IN myBlock VARCHAR(20)
)
BEGIN

    INSERT INTO blocks (block)
    VALUE (myBlock);

END

如果我在代码和数据库设置中出错,并且block列只允许15个字符,但使用我的应用程序的某个人能够在myBlock中获得20个字符,该怎么办?在这个例子中我会得到类似的错误:

Error Code: 1406. Data too long for column 'block'

是否有某种方法可以处理任何错误(不仅仅是这个错误),然后将其报告到名为BlockSprocErrors的表中,以便在MySQL内部和存储过程本身内进行监控?

通过修改上面的程序来寻找一个非常基本的例子。

1 个答案:

答案 0 :(得分:0)

这是我最终做的事情:

DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
        GET DIAGNOSTICS condition 1
        @SQLState = RETURNED_SQLSTATE, @SQLMessage = MESSAGE_TEXT; 
        SELECT CONCAT('Database error occurred, state - ',@SQLState, '; error msg - ', @SQLMessage) INTO @errorString; 

        CALL Collectors_Errors 
        (@errorString, 
        'Collectors_InsertAlbum', 
        barcodeApp, 
        usernameApp);
END;