На MySql 5.7 , я хотел бы запустить эту процедуру, которая должна извлечь tag1
статей из таблицы article
и вставить их в таблицу article_tag
:
DELIMITER $$
CREATE PROCEDURE dt1()
BEGIN
DECLARE maxid INT;
DECLARE x INT;
DECLARE tag1 VARCHAR(30);
DECLARE ntag1 int;
SET maxid = (SELECT MAX(id) FROM `article`);
SET x = (SELECT MIN(id) FROM ` article`) ;
WHILE x<= maxid DO
SET tag1 = (SELECT tag1 from `article` WHERE id=x);
call debug_msg(TRUE, tag1);
SET ntag1 = (SELECT count(*) from `article_tag` WHERE tag=tag1);
IF ntag1 = 0 THEN INSERT INTO `article_tag` (tag, slug, frequency) VALUES (tag1, tag1, 1);
ELSE UPDATE ` article_tag` SET frequency = frequency + 1 WHERE tag=tag1 ;
END IF;
SET x = x + 1;
END WHILE;
END$$
Я могу подтвердить, что ни одно из значений tag1
не имеет значения:
SELECT count(*) from `article` WHERE tag1 IS NULL;
+----------+
| count(*) |
+----------+
| 0 |
+----------+
Однако, когда я запускаю процедуру, я получаю:
ОШИБКА 1048 (23000): Столбец 'tag' не может быть нулевым
Вот воспроизводимый пример.
https://www.db -fiddle.com / f / 3ymPtabSksRUMSBep7SyX8 / 5
Эта проблема беспокоит меня часамиТак что оцените подсказки о том, почему это происходит и как это исправить?