由于条件的原因,我需要将字符串连接成一个触发器变量;
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 +=
行,因为它不理解+信号。
答案 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.quantity
和NEW.quantity
不是null
。如果它们可以是null
,那么您需要检查它是否为null
并处理该案例。
EDIT2:
每次我们为SET
分配值时,我们都需要使用tempVar
关键字。