如果ELSE语句在MySQL中产生无效的语法

时间:2019-03-16 20:07:41

标签: mysql sql

不确定为什么会返回无效的语法:

CREATE DEFINER=`root`@`localhost` PROCEDURE `AddColor`(
                            IN hexvalue varchar(7),
                          IN notes varchar(50))
    BEGIN
    IF hexvalue REGEXP '^#[0-9A-F]{6}$' THEN

       INSERT INTO data.colors(hexvalue,notes) VALUES (hexvalue,notes);

    ELSE

       SIGNAL SQLSTATE '400'
       SET MESSAGE_TEXT = 'Invalid hex value specified';

    END IF;
    END

写入时似乎没有任何错误。

1 个答案:

答案 0 :(得分:1)

基于以下official documentation:

  

SIGNAL语句中的condition_value指示要返回的错误值。它可以是SQLSTATE值(5个字符的字符串文字),或者是condition_name,它引用先前用DECLARE ... CONDITION定义的命名条件(请参见第13.6.7.1节“ DECLARE ...条件语法”)。

尝试以下语法,并将SIGNAL SQLSTATE值更改为04000

CREATE DEFINER=`root`@`localhost` PROCEDURE `AddColor`(
                    IN hexvalue varchar(7),
                    IN notes varchar(50))
BEGIN
IF  (hexvalue REGEXP '^#[0-9A-F]{6}$') THEN

        INSERT INTO data.colors(`hexvalue`,`notes`) VALUES (hexvalue,notes);

    ELSE

        SIGNAL SQLSTATE '04000' SET MESSAGE_TEXT = 'Invalid hex value specified';

    END IF;
END;