不确定返回无效语法的原因:

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

写进去的时候好像没有什么错误。

最佳答案

基于以下official documentation:
信号语句中的条件值指示要返回的错误值。它可以是一个SQLSTATE值(一个5个字符的字符串文字)或一个引用先前用DECLARE定义的命名条件的条件名称。。。条件(见第13.6.7.1节,“声明。。。条件语法”)。
尝试以下语法并将信号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;

07-24 09:38