MySQL Trigger将多个字符串连接成一个变量

时间:2017-03-01 16:59:48

标签: mysql triggers

由于条件的原因,我需要将字符串连接成一个触发器变量;

DELIMITER //

CREATE TRIGGER product_before_update 
BEFORE UPDATE 
    ON products FOR EACH ROW

BEGIN 
    DECLARE tempVar varchar(1000);

    SET tempVar := '[Product update] ' + old.name;

    IF(OLD.quantity != NEW.quantity) THEN
        tempVar += 'Quantity changed: ' . OLD.quantity . ' to ' . NEW.quantity;
    END IF
END; //

DELIMITER ;

所以基本上tempVar会有多个信息,我想在变量上写一切,以后我可以添加到日志表中。

错误发生在tempVar +=行,因为它不理解+信号。

1 个答案:

答案 0 :(得分:0)

您需要一系列CONCAT

tempVar := CONCAT(CONCAT(CONCAT(CONCAT(tempVar, 'Quantity changed: '), OLD.quantity), ' to '), NEW.quantity);

如果quantity是数字,那么您需要cast它到varchar,如下所示:

tempVar := CONCAT(CONCAT(CONCAT(CONCAT(tempVar, 'Quantity changed: '), CAST(OLD.quantity as varchar(50))), ' to '), CAST(NEW.quantity as varchar(50)))
编辑:Paul Spiegel的建设性批评是有效的,所以我将其想法添加到答案中

没有CAST

tempVar := CONCAT(tempVar, 'Quantity changed: ', OLD.quantity, ' to ', NEW.quantity);

使用CAST

tempVar := CONCAT(tempVar, 'Quantity changed: ', CAST(OLD.quantity as varchar(50)), ' to ', CAST(NEW.quantity as varchar(50)));

在这个答案中,我假设OLD.quantityNEW.quantity不是null。如果它们可以是null,那么您需要检查它是否为null并处理该案例。

EDIT2:

每次我们为SET分配值时,我们都需要使用tempVar关键字。