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
、私はいくつかの愚かな文法の間違いを作ることにしなければなりませんが、私はそれが何であるかを見つけようとしておかしくなりそうだような気がします。私が行方不明になっていることは明らかですか?
'BEGIN'の直後に' FOR EACH ROW'という構文がありませんか? –
行を「AFTER UPDATE ON」ジョブとして「行ごとに」変更することができます – Rajesh
ありがとうございます!私は本当にそれが欠けていた。それは2時間の流出と今私は恥ずかしい起動する感じです:( – user1090729