Если оператор ELSE создает неверный синтаксис в MySQL - PullRequest
2 голосов
/ 16 марта 2019

Не уверен, почему возвращается неправильный синтаксис:

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 Ответ

1 голос
/ 16 марта 2019

На основании следующей официальной документации:

Condition_value в операторе SIGNAL указывает значение ошибки, которая должна быть возвращена. Это может быть значение SQLSTATE (строковый литерал из 5 символов) или имя_условия, которое ссылается на именованное условие, ранее определенное с помощью DECLARE ... CONDITION (см. Раздел 13.6.7.1, «DECLARE ... CONDITION» Синтаксис»).

Попробуйте следующий синтаксис и измените значение 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...