假设我有一个存储过程:
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内部和存储过程本身内进行监控?
通过修改上面的程序来寻找一个非常基本的例子。
答案 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;