3

トリガーに少し問題があります。私はトリガーを作成しました:

BEGIN 

IF((SELECT `Wert` 
    FROM parameter_history 
    WHERE `BusNr` = NEW.BusNr AND `MesswertNr` = NEW.MesswertNr 
    ORDER BY `Timestamp` DESC LIMIT 1) != NEW.Value) 


THEN 
    INSERT INTO parameter_history (`BusNr`, `MesswertNr`, `Value`) 
    VALUES (NEW.BusNr, NEW.MesswertNr, NEW.Value); 
END IF; 

END 

トリガーのイベントは更新後です。すでにある場合、New.Valueそれは本当にうまく機能します。しかしNew.Value、データベースにない場合は機能せず、理由がわかりません。問題は、テーブルに実際にエントリがない場合、「NEW.Value」から値を取得できないことです。MySQL-Programm を使用すると、「0 行が見つかりました」というメッセージが表示され、この問題を修正したいと考えています。

誰でも私を助けることができますか?

敬具

4

1 に答える 1

0

もちろん、ステートメントにNEW.valueの外観がすでにある場合は、機能します。

    IF((select x) != NEW.Value)  // select x only when it does not equal 
//what the current value of New.Value is.

THEN  // preform my insert statement. 
    INSERT INTO parameter_history (`BusNr`, `MesswertNr`, `Value`) 
    VALUES (NEW.BusNr, NEW.MesswertNr, NEW.Value); 

END IF;

ここで、New.Valueが存在しないか、空(null)である場合を考えてみます。実行中の場合、xが等しくない場合にのみxを選択しますか???? 。

0行が返されます。

何を構築しているのかよくわかりませんが、New.Valueのデフォルト値を使用して、必要なときにいつでも更新するプロシージャを実行すると、空でないフィールドで更新後にトリガーが実行されますか?

于 2012-09-25T22:34:48.663 に答える