2017-11-17 10 views
0

私はのproyectのためのすべてのテストが「準備」かどうかを確認するために、テーブルのproyectにトリガーを作成する必要があります。それらのすべてが準備が整っていれば、私はプロイェクトを検索し、プロイエントのステータスを「準備完了」とする必要があります。そうでない場合は、不完全です。MySQLのトリガーは

私はUPDATEとINSERTのトリガーを作成する必要があることを知っています。私はこのようなことを計画していますが、私はそれを働かせることはできません。

このソリューションを作成しましたが、そのプロイクトのテストの合計数が、そのプロイクトのテスト準備の数を下回っている場合、プロイクトは準備ができていません。両方が等しい場合、プロイクトは準備ができています。

それが動作しない理由を私は知らない:あなたは、彼らが持っているトリガーに1つの以上のステートメントを使用している場合は、エラーの更新のproyectの

CREATE TRIGGER update-proyect 
AFTER INSERT ON tests 
FOR EACH ROW 

SET @total = select COUNT(*) 
       from tests 
      where IdProyect= NEW.IdProyect; 


SET @ready = select COUNT(*) 
      from prueba 
      from tests 
      where IdProyect= NEW.IdProyect 
      AND status = 'ready'; 

IF (@total == @ready) 
    UPDATE proyect SET status = 'Ready' WHERE IdProyect = NEW.IdProyect; 
ELSE 
    UPDATE proyect SET status = 'Incomplete' WHERE IdProyect = NEW.IdProyect; 
END IF; 

答えて

1

ロードは、update_proyectする無効なトリガー名の変更です中括弧で囲まれた後のselect、mysqlに==比較関係演算子がない、use =またはnull safe equals < =>のいずれかでif文がthenステートメント。 これは少なくともシンタックスです。

DROP TRIGGER IF EXISTS update_proyect; 
DELIMITER $$ 

CREATE TRIGGER update_proyect 
AFTER INSERT ON tests 
FOR EACH ROW 
BEGIN 
SET @total = (select COUNT(*) 
       from tests 
      where IdProyect= NEW.IdProyect 
       ); 

SET @ready = (select COUNT(*) 
      from prueba 
      #from tests 
      where IdProyect= NEW.IdProyect 
      AND status = 'ready' 
      ); 

IF (@total = @ready) THEN 
    UPDATE proyect SET status = 'Ready' WHERE IdProyect = NEW.IdProyect; 
ELSE 
    UPDATE proyect SET status = 'Incomplete' WHERE IdProyect = NEW.IdProyect; 
END IF; 

END $$ 

DELIMITER ; 
+0

私はMySQLについては知らなかったし、PL-SQLについて少し知っていました。ありがとうございました –