【发布时间】:2020-10-17 12:43:36
【问题描述】:
我正在创建一个 MySQL 触发器,用于在 UPDATE 查询更改某些值时使用新值更新各种表。我不断收到此特定触发器的以下语法错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 29
在这种情况下,第 29 行是 END 语句的行。
这是我的完整代码:
DELIMITER $$
CREATE TRIGGER update_selling_prices BEFORE UPDATE ON t1
FOR EACH ROW
BEGIN
DECLARE update_price INT DEFAULT 0;
DECLARE selling_price_1 DECIMAL(10, 3) DEFAULT 0.000;
DECLARE selling_price_2 DECIMAL(10, 3) DEFAULT 0.000;
IF (OLD.rrp_price <> NEW.rrp_price OR OLD.discount_1 <> NEW.discount_1 OR OLD.discount_2 <> NEW.discount_2 OR OLD.net_price <> NEW.net_price OR OLD.markup <> NEW.markup OR OLD.delivery_cost <> NEW.delivery_cost) THEN
SET update_price = (SELECT b.is_auto_update FROM price_categories c INNER JOIN brands b ON b.brand_name = c.brand_name WHERE c.id = NEW.category_id LIMIT 1);
IF (update_price = 1) THEN
IF (NEW.is_bundle = 0) THEN
UPDATE t2 SET temp = 'Fired Single' WHERE id = NEW.id;
ELSE IF (NEW.is_bundle = 1) THEN
UPDATE t2 SET temp = 'Fired Bundle' WHERE id = NEW.id;
END IF;
END IF;
END IF;
END;
$$
DELIMITER ;
当前的 UPDATE 语句只是我将要进行的一些实际计算的占位符。
请注意:我将 Sequel Pro 用于大多数与 MySQL 相关的东西,最初是使用他们的 GUI 来尝试添加触发器 - 它会自动添加周围的代码,所以我只会在 BEGIN之间创建所有内容> 和 END 语句。这也导致了同样的语法错误,所以我不相信它与分隔符有关,就像我已经在这里找到的一些类似线程一样。尽管如此,我还是尝试通过普通查询添加完整的触发代码;更改分隔符语法 - 例如 END$$、END $$、END; $$ 等等。
我已经成功创建了其他具有类似语法的触发器,但它们不包括 DECLARE 语法。
我哪里错了?
【问题讨论】:
-
我在发布之前检查了该问题 - 但我的 DECLARE 语句处于正确位置,我没有收到该错误。
标签: mysql syntax triggers database-trigger