0

UDATES であるテーブルのトリガーを作成しようとしています。複数のトリガーでこれを行うことができると思いましたが、MySQL は同じタイプの 1 つのテーブルで複数のトリガーをサポートしていないと思います。そのため、これを 1 つのトリガーに含めることを余儀なくされました。

基本的に、現在のテーブルで更新された内容に基づいて、別のテーブルに新しいレコードを挿入しようとしています。

これが私がこれまでに持っているもので、動作します:

BEGIN
-- Definition start
INSERT INTO prices (stationID, price, type, 
prevPrice, prevDate, dateCreated, apiKey, uid) 
VALUES(NEW.stationID, NEW.regPrice, 'reg', OLD.regPrice,
OLD.regDate, NEW.regDate, NEW.lastApiUsed, NEW.lastUpdatedBy);
-- Definition end
END

私がする必要があるのはtype、ユーザーが与えるタイプに基づいて変更される可能性があることです。ユーザーは一度に 1 つのタイプしか更新できないためです。IF ステートメントについて考えていましたIF THENが、それを機能させる方法がわかりませんでした。IFステートメントで使用する列名の文字列値を使用できると考えていましたが、それが可能かどうかはわかりません。

このようなもの:

    BEGIN
    -- Definition start
    IF(type == 'reg') THEN
    INSERT INTO prices (stationID, price, type, 
    prevPrice, prevDate, dateCreated, apiKey, uid) 
    VALUES(NEW.stationID, NEW.regPrice, 'reg', OLD.regPrice,
    OLD.regDate, NEW.regDate, NEW.lastApiUsed, NEW.lastUpdatedBy);
    END IF;
    -- Definition end
    END
4

1 に答える 1

0

IF THEN ELSE無事に取引完了できました。次に、値の条件をテストしましたNULL。そうであればTRUE、コードを実行しました。何らかの理由で、複数INSERTのコマンドがあるにもかかわらず、1 つのコマンドしか実行しませんUPDATE。これについて何か考えはありますか?

BEGIN
-- Definition start
IF(NEW.regPrice IS NOT NULL) THEN
INSERT INTO prices (stationID, price, type, 
prevPrice, prevDate, dateCreated, apiKey, uid) 
VALUES(NEW.stationID, NEW.regPrice, 'reg', OLD.regPrice,
OLD.regDate, NEW.regDate, NEW.lastApiUsed, NEW.lastUpdatedBy);

ELSEIF(NEW.midPrice IS NOT NULL) THEN
INSERT INTO prices (stationID, price, type, 
prevPrice, prevDate, dateCreated, apiKey, uid) 
VALUES(NEW.stationID, NEW.midPrice, 'mid', OLD.midPrice,
OLD.midDate, NEW.midDate, NEW.lastApiUsed, NEW.lastUpdatedBy);

ELSEIF(NEW.prePrice IS NOT NULL) THEN
INSERT INTO prices (stationID, price, type, 
prevPrice, prevDate, dateCreated, apiKey, uid) 
VALUES(NEW.stationID, NEW.prePrice, 'pre', OLD.prePrice,
OLD.preDate, NEW.preDate, NEW.lastApiUsed, NEW.lastUpdatedBy);
END IF;
-- Definition end
END
于 2012-08-01T12:52:37.800 に答える