我正在编写我的第一个存储过程作为触发器。我在dev迁移中这样做,因为我们有两个系统在开发中不能互相交流,所以我需要模拟通常来自其他系统的数据。
我的程序是作为我们的dev迁移脚本的一部分添加的。
DELIMITER |;
CREATE TRIGGER `activity_insert` AFTER INSERT ON `activity`
FOR EACH ROW
BEGIN
UPDATE `activity` AS `a` JOIN `handle` AS `h` on `a.handle_id` = `h.handle_id` SET `path` = CONCAT(`h.handle`,'/',`a.activity_handle`) WHERE `a.path` IS NULL;
END;
|
DELIMITER;
答案 0 :(得分:2)
我希望逻辑是:
DELIMITER $$
CREATE TRIGGER activity_insert BEFORE INSERT ON activity
FOR EACH ROW
BEGIN
IF new.path IS NULL THEN
SET new.path = (SELECT CONCAT(h.handle, '/', new.activity_handle)
FROM handle h
WHERE new.handle_id = h.handle_id
);
END IF;
END;$$
DELIMITER;
您的代码存在许多问题:
update
更新正在修改的表格。|
作为分隔符。它是一个有效的MySQL运算符。handle.handle_id
是唯一的。这似乎是基于名称的合理假设,但您可以添加limit 1
以保证不会返回多行。