2013-10-21 68 views
0

比方說,我有一個存儲過程:如何處理基本MySQL存儲過程中的錯誤?

DELIMITER $$ 

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

    IN myBlock VARCHAR(20) 
) 
BEGIN 

    INSERT INTO blocks (block) 
    VALUE (myBlock); 

END 

,如果我在我的代碼和數據庫設置犯了一個錯誤,並且列block只允許15個字符,但有人使用我的應用程序已經能夠得到20字符變成myBlock?我會得到類似這樣的錯誤在這個例子中:

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

是否有某種方式來處理任何錯誤(不只是這一個),然後將其上報到表名爲BlockSprocErrors監控MySQL內和內存儲的程序本身?

只是尋找一個非常基本的例子,通過修改我上面的程序。

+3

查找處理程序:http://dev.mysql.com/doc/refman/5.1/en/declare-handler.html –

回答

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;