Ошибка сгенерированной хранимой процедуры - PullRequest
0 голосов
/ 25 ноября 2018

Это код

CREATE TABLE `church` (
  `ID` int(10) UNSIGNED NOT NULL,
  `StudentID` int(11) NOT NULL,
  `semesterID` int(11) NOT NULL,
  `attendedWed` int(11) NOT NULL,
  `attendedFri` int(11) NOT NULL,
  `attendedSabM` int(11) NOT NULL,
  `attendedSabE` int(11) NOT NULL,
  `ChurchScore` double(10,2) GENERATED ALWAYS AS ((((((`attendedWed` + `attendedFri`) + `attendedSabM`) + `attendedSabE`) * 100) / 60)) STORED
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Это ошибка

Операция не выполнена: при применении сценария SQL к базе данных произошла ошибка.Выполнение: ALTER TABLE citizenshipgroup3. church CHANGE COLUMN ChurchScore ChurchScore DOUBLE (10,2) NULL DEFAULT attendedWed;

ОШИБКА 1064: в синтаксисе SQL имеется ошибка;проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы найти правильный синтаксис для использования рядом с 'attendedWed' в строке 2. Оператор SQL: ALTER TABLE citizenshipgroup3. church CHANGE COLUMN ChurchScore ChurchScore DOUBLE (10,2) NULL DEFAULT attendedWed

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Ошибка появляется во время ALTER TABLE, когда вы пытаетесь изменить столбец ChurchScore, устанавливая значение DEFAULT в выражение, включающее другой столбец attendedWed.

Кроме того, вашПохоже, что сообщение об ошибке происходит из MariaDB, а не из MySQL.

Из Документация Mariadb :

Из MariaDB 10.2.1 вы можете использовать большинство функций в DEFAULT.Выражения должны иметь круглые скобки вокруг них.Если вы используете недетерминированную функцию в DEFAULT, то все вставки в таблицу будут реплицироваться в режиме строки.Вы даже можете ссылаться на более ранние столбцы в выражении DEFAULT:

CREATE TABLE t1 (a int DEFAULT (1+1), b int DEFAULT (a+1));
CREATE TABLE t2 (a bigint primary key DEFAULT UUID_SHORT());

Так что вам нужно убедиться в следующем:

  1. Обновите версию MariaDB до 10.2.1и выше.Желательно обновить до текущей последней версии (сейчас она 10.3+).
  2. Вам необходимо использовать скобки вокруг выражения, указанного в предложении DEFAULT.

Так что ALTER TABLE оператор будет выглядеть так:

ALTER TABLE `citizenshipgroup3`.`church` 
CHANGE COLUMN `ChurchScore` `ChurchScore` DOUBLE(10,2) NULL 
DEFAULT (attendedWed) ;
0 голосов
/ 25 ноября 2018

Ваш синтаксис в порядке.Проблема в том, что MySQL не поддерживает сгенерированные столбцы до 5.7.Вероятно, вы используете более раннюю версию.

Вероятно, самое простое решение - использовать представление для расчета.

...