2011-11-09 14 views
0

理解するのに約1時間を費やしました。 このSQLトリガーはどこに構文エラーがありますか?このSQLトリガーはどこに構文エラーがありますか?

CREATE 
TRIGGER playlis_trubric_count_on_playlist_shared_update 
AFTER UPDATE ON playlist_playlist 
    FOR EACH ROW 
    IF (NEW.shared != OLD.shared) AND (NEW.shared = 1) THEN 
     UPDATE etv.playlist_playlistrubric 
      SET count = playlist_playlistrubric.count + 1 
     WHERE etv.playlist_playlistrubric.id = NEW.rubric_id; 
    ELSEIF (NEW.shared != OLD.shared) AND (NEW.shared = 0) THEN 
     UPDATE etv.playlist_playlistrubric 
      SET count = playlist_playlistrubric.count - 1 
     WHERE etv.playlist_playlistrubric.id = NEW.rubric_id 
    END IF; 

ERRORは言う:

あなたのSQL構文でエラーが発生しています。適切な構文の がMySQLサーバーのバージョンに対応していることを確認し、 'ELSEIF(NEW.shared!= OLD.shared)AND(NEW.shared = 0)の近くの を使用してください。 UPDATE etv.p' on line 1

the documentationから
+1

エラーとは何ですか? –

答えて

2

BEGIN ... END構文を使用することにより、あなたは は、複数のステートメントを実行するトリガーを定義することができます。BEGINブロック内では、 などのストアドルーチン内で許可されている他の構文を使用して、 条件やループを使用することもできます。あなたが複数の 文を実行トリガを定義するためのmysqlのプログラムを使用 場合はしかし、単に保存されたルーチンのように、あなたが使用できるように 区切りmysqlの文を再定義する必要があります。トリガー内のステートメントデリミタ 定義。次の例は、これらの点を示しています。これは 各行を更新するために使用される新しい値をチェック UPDATEトリガを定義し、その値が前 をチェックする必要があるので、これはBEFOREトリガーでなければならない0から100 の範囲内であることが値を変更します行を更新するために使用されます。

mysql> delimiter // 
mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account 
    -> FOR EACH ROW 
    -> BEGIN 
    ->  IF NEW.amount < 0 THEN 
    ->   SET NEW.amount = 0; 
    ->  ELSEIF NEW.amount > 100 THEN 
    ->   SET NEW.amount = 100; 
    ->  END IF; 
    -> END;// 
mysql> delimiter ; 

あなたがBEGINENDを逃していると、あなたはまた、現在お使いのトリガ定義は、最初NEW.rubric_idで終了するので、区切りトリックを必要としている(していますなぜそのポイントの直後に解析エラーが発生するのか)。

+0

うん...それはそれだった..ありがとう... delimetersは悪いです:) – Pol

関連する問題