2016-05-03 10 views
0

私は非常に速い方法で(70%未満の予測時間で)ジョブが完了したときに警告を発するトリガーを作成しようとしています。エラーが発生していないかどうかを確認します。更新後に別のテーブルに新しい行を挿入するためのMysqlトリガー

id 
job_id (references job.job_id) 
subjob_time (this is in seconds) 

そして、私たちが望む警告テーブル:また、このようになりますサブジョブテーブルがありますので、仕事には多くのサブジョブを持つ

id 
machine_id 
estimated_time 
hour_of_completion 
state (this is 0 for unfinished jobs and 1 for finished ones) 

次のようになりますジョブテーブルがあります警告をログに記録すること:

id (auto_increment) 
machine_id 
hour_of_completion (this is the time of the day when the job finished) 

これは私がこれまで試したものです。

DELIMITER $$ 

DROP TRIGGER IF EXISTS `job_too_quick` $$ 
CREATE TRIGGER `job_too_quick` $$ 
AFTER UPDATE ON `job` 
BEGIN 
    IF OLD.state <> NEW.state AND NEW.state = 1 THEN 
    IF (SELECT sum(subjob_time) 
     FROM subjob 
     WHERE job_id = OLD.id) 
     < 
     (TIME_TO_SEC(NEW.estimated_time) * 0.7) THEN 
      INSERT INTO warnings (machine_id, hour_of_completion) 
      VALUES (OLD.machine_id, OLD.hour_of_completion); 
     END; 
    END IF; 
    END IF; 
END$$ 

DELIMITER ; 

しかし、私はそれを実行しようとすると、私はこのエラーを取得する:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AFTER UPDATE ON `jobs` 
BEGIN 
    IF OLD.state <> NEW.state AND NEW.s' at line 1 

、私はいくつかの愚かな文法の間違いを作ることにしなければなりませんが、私はそれが何であるかを見つけようとしておかしくなりそうだような気がします。私が行方不明になっていることは明らかですか?

+0

'BEGIN'の直後に' FOR EACH ROW'という構文がありませんか? –

+0

行を「AFTER UPDATE ON」ジョブとして「行ごとに」変更することができます – Rajesh

+0

ありがとうございます!私は本当にそれが欠けていた。それは2時間の流出と今私は恥ずかしい起動する感じです:( – user1090729

答えて

0

誰かが似たような問題を抱えている場合、間違いは実際には非常に恥ずかしいほど愚かでした。

関連する問題