CREATE TRIGGER Alerta_Trig
BEFORE INSERT OR UPDATE OF Valor ON Medicao
FOR EACH ROW
WHEN (NEW.VALOR > 40)
BEGIN
UPDATE SENSOR
SET ALERTA = 'Alerta laranja'
WHERE SENSOR_ID=(SELECT SENSOR_SENSOR_ID FROM MEDICAO);
END;
我有这个传感器表,它应该接收一个带有警报的字符串,如果1值> 40进入Medicao表。有没有?
答案 0 :(得分:2)
由于你没有说出什么是错的,我猜测了一下,但我可以看到两个直接的潜在问题。
通常,您不应该再次查询同一个表,因为您可能会遇到变异表错误。在子查询中也没有条件,因此您可能会返回多行,并且子查询返回多于一行的错误。
据推测,您正在使用该子查询尝试从受影响的行中获取ID值,因此请使用:NEW伪行:
CREATE TRIGGER Alerta_Trig
BEFORE INSERT OR UPDATE OF Valor ON Medicao
FOR EACH ROW
WHEN (NEW.VALOR > 40)
BEGIN
UPDATE SENSOR
SET ALERTA = 'Alerta laranja'
WHERE SENSOR_ID = :NEW.SENSOR_SENSOR_ID;
END;