在 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):“标记”列不能为空
这是一个可复制的示例。
https://www.db-fiddle.com/f/3ymPtabSksRUMSBep7SyX8/5
这个问题困扰着我几个小时。因此,请欣赏提示,了解发生这种情况的原因以及如何解决?