存储过程返回“ASCII \ 0”错误但无法找到引用

时间:2018-04-20 01:30:53

标签: mysql stored-procedures

我正在编写我的第一个存储过程作为触发器。我在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;

1 个答案:

答案 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更新正在修改的表格。
  • 你想要"之前"触发器,而不是"触发后#34;。
  • 请勿使用|作为分隔符。它是一个有效的MySQL运算符。
  • 您过度使用了反引号,包括将表别名放在列别名中。
  • 这假定handle.handle_id是唯一的。这似乎是基于名称的合理假设,但您可以添加limit 1以保证不会返回多行。