带有条件触发器的正确MySQL语法是什么?
任何帮助将受到好评。 :)带有条件触发器的正确MySQL语法是什么?
场景:我有一个MySql表'artworkjobs_proudction'。我试图在PHPMyAdmin中创建一个触发器,在表中的某些字段符合特定条件时设置日期。由于它是多种条件,它似乎是一个IF条件是要走的路。下面是触发:
CREATE TRIGGER `createProductionScheduleDate`
AFTER UPDATE ON `artworkjobs_production`
FOR EACH ROW
IF ((OLD.ArtworkStatus = 'Approved' OR NEW.ArtworkStatus = 'Approved')
AND (OLD.isCompleted is NULL OR NEW.isCompleted is NULL)
AND (OLD.isCompleted = 'N' OR NEW.isCompleted = 'N')
AND (OLD.printDueDate <> '0000-00-00 00:00:00' OR NEW.printDueDate <> '0000-00-00 00:00:00')
AND (length(OLD.invoiceNumber) > 0) OR (length(NEW.invoiceNumber) > 0)
AND (OLD.importance > 0) OR NEW.importance > 0) AND (OLD.quantity > 0 OR NEW.quantity > 0)
THEN SET originalProductionDueDate = now()
END IF;
我收到的错误是:处理您的请求
一个或多个错误发生: 下面的查询失败:
<SQL query as stated above>
MySQL说:#1193 - 未知系统变量 'originalProductionDueDate'
originalProductionDueDate
不过是一个正确的字段。 :(
createProductionScheduleDate
是触发器的名称,表的不 表是artworkjobs_production
这点我定义在这里:。
CREATE TRIGGER createProductionScheduleDate
AFTER UPDATE ON artworkjobs_production
如果要更改该行一列中的值这催生了扳机,使用
SET NEW.originalProductionDueDate = now();
但是你不能在更改NEW.<column>
值触发后该行已经被更新,那么你必须做一个BEFORE触发器。
现在感谢您的测试。 –
这是问题所在。我正在考虑后退,认为行更新会在其他项目得到满足之后发生。现在对我来说非常有意义! –
请添加表'createProductionScheduleDate'的定义。 – FDavidov
@FDavidov这是触发器的名称而不是表格。该表是artworkjobs_production。我在这里定义了:'CREATE TRIGGER createProductionScheduleDate AFTER UPDATE ON artworkjobs_production' –
OOPSS !!!当然!!!对不起,这个错误。 – FDavidov