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

标签 mysql sql stored-procedures

假设我有一个存储过程:

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 和存储过程本身内进行监视?

只是通过修改上面的过程来寻找一个非常基本的示例。

最佳答案

这是我最终所做的:

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;

关于mysql - 如何处理基本 MySQL 存储过程中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19505248/

相关文章:

PHP 脚本异常行为

sql - 规范化 MySQL 查询中的重音字符

mysql - 每个月每个唯一 ID 的累计总和

javascript - CosmosDB 存储过程 - promise 而不是回调

MySQL RDS存储过程更新查询速度慢

php - Codeigniter - session 登录错误

php - 通过 PHP 使用 While 循环将多个数据插入到 SQL Server

mysql - 基于数据分组的特定mysql更新

sql - Oracle中WITH多条语句

stored-procedures - 将大量 XML 传输到 CLR 存储过程