2016-11-14 4 views
1

どんな助力も受け入れられるでしょう。 :)条件付きのトリガーの正しい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; 

私が受けてるのエラーがある:あなたの要求を処理している間

1つ以上のエラーが発生しましたている: 次のクエリが失敗した:<SQL query as stated above>

下記のトリガーがあります

MySQLは言った:#1193 - 不明なシステム変数 'originalProductionDueDate'

originalProductionDueDateが正しいフィールドです。 :(

createProductionScheduleDateはないテーブルの、トリガーの名前で表がartworkjobs_productionある 私はここに定義した:。。

CREATE TRIGGER createProductionScheduleDate 
     AFTER UPDATE ON artworkjobs_production 
+0

テーブル 'createProductionScheduleDate'の定義を追加してください。 – FDavidov

+0

@FDavidovこれは、テーブルではなくトリガーの名前です。テーブルはartworkjobs_productionです。私がここで定義したのは: 'CREATE TRIGGER createProductionScheduleDate AFTER UPDATE ON artworkjobs_production' –

+0

OOPSS !!!もちろん!!!間違って申し訳ありません。 – FDavidov

答えて

1

あなたが行のカラムの値を変更したい場合あなたはBEFOREトリガーでそれを行う必要があります。それは

SET NEW.originalProductionDueDate = now(); 

を使用し、トリガーを生み出ししかし、あなたはAFTERトリガでNEW.<column>値を変更することはできません。行がすでにそれまでに更新されている。

+0

テストに感謝します。 –

+0

それが問題でした。他の項目が満たされた後に行の更新が行われると考えていると考えていました。今、私には完璧な意味があります! –