【发布时间】:2021-02-12 23:28:57
【问题描述】:
我尝试在插入前使用触发器更新一些列
DROP TRIGGER IF EXISTS update_p_posts_places;
DELIMITER $$
CREATE TRIGGER update_p_posts_places BEFORE
INSERT
ON
`p_posts` FOR EACH ROW
BEGIN
DECLARE
p_post_group_id_ int;
SELECT
`p_post_subgroup`.`p_post_group_id`
INTO
p_post_group_id_
FROM
`p_post_subgroup`
WHERE
`p_post_subgroup`.`p_post_subgroup_id` = NEW.p_post_subgroup_id;
IF(p_post_group_id_ = 5) THEN
BEGIN
DECLARE
place1_id_ int;
place2_id_ int;
place3_id_ int;
place4_id_ int;
place5_id_ int;
SELECT
`Places`.`place1_id`,
`Places`.`place2_id`,
`Places`.`place3_id`,
`Places`.`place4_id`,
`Places`.`place5_id`
INTO
place1_id_, place2_id_, place3_id_, place4_id_, place5_id_
FROM
`Places`
WHERE
`Places`.`place5_id` = NEW.p_post_place_id LIMIT 1;
SET NEW.place5_id = place5_id_;
SET NEW.place1_id = place1_id_;
SET NEW.place2_id = place2_id_;
SET NEW.place3_id = place3_id_;
SET NEW.place4_id = place4_id_;
END $$
ELSE
SET NEW.place5_id = NULL;
END IF;
END $$
DELIMITER ;
它显示了一些语法错误。
#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'DECLARE 附近使用的正确语法 place1_id_ int; place2_id_ int; ' 在第 20 行
【问题讨论】:
-
声明的变量必须紧跟在 BEGIN 之后,而且你有比你需要的更多的开始。
-
我更新了我的查询。同样的错误。
-
你的第一端应该由 ; 终止(分号)不是 $$ 并且每个变量都需要一个 DECLARE
-
您的代码中有
END $$。在DELIMITER ;之前应该只使用一次 -
在 DECLARE 中,变量必须用
,分隔,而不是;。
标签: mysql