无法使用此触发器[SQL Oracle]

时间:2015-04-17 23:07:23

标签: sql oracle triggers

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表。有没有?

1 个答案:

答案 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;