如何在mysql函数中使用exit或continue处理程序而不是存储过程

时间:2017-10-01 06:34:23

标签: mysql function

我创建了一个mysql函数,这个函数有时会抛出锁定超时异常。我想处理这个异常,这是我的函数

DELIMITER //

DROP FUNCTION IF EXISTS getNextNumber;
DELIMITER //
CREATE FUNCTION getNextNumber(key1 VARCHAR(20)) RETURNS INTEGER DETERMINISTIC READS SQL DATA
    BEGIN
        DECLARE number INTEGER;
        DECLARE query_timeout INT DEFAULT FALSE;

        DECLARE CONTINUE HANDLER FOR 1205 SET query_timeout = TRUE;
        -- Error: 1205 SQLSTATE: HY000 (ER_LOCK_WAIT_TIMEOUT)

        select NUMBER into number FROM NUMBER_TABLE WHERE NUMBER_KEY = key1 FOR UPDATE;

        IF query_timeout = TRUE THEN
            RETURN -1;
        ELSE 
            RETURN (number+1);
        END IF;
END//

DELIMITER ;

我正在使用FOR UPDATE它锁定该表,所以如果有锁定超时错误,那么我想返回-1 else +1

0 个答案:

没有答案