2016-08-15 16 views
0

私は、テーブルを更新すると、同じテーブルがフィールドを更新するというトリガを行っています。 トリガーがある:テーブルをトリガーして同じテーブルを更新するにはどうすればよいですか?

CREATE TRIGGER update_user 
AFTER UPDATE 
ON users 
FOR EACH ROW 
BEGIN 
    IF (NEW.totalPoints > 0 AND NEW.totalPoints < 200) 
    THEN 
     updateUser("rank 1", NEW.ID); 
    ELSEIF (NEW.totalPoints > 200 AND NEW.totalPoints < 400) 
    THEN 
     updateUser("rank 2", NEW.ID); 
    END IF; 
END; 

と手順は次のとおりです。

CREATE PROCEDURE updateUser(newRank VARCHAR(100), IDUser INT) 
BEGIN 
    UPDATE users SET rank = newRank WHERE ID = IDUser; 
END; 

プロシージャを作成するときに、私が持っているエラーは次のとおりです。

1064 - あなたはあなたのSQL構文でエラーが発生しています;あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして、正しい構文を使用して ''の近くで使用してください。

ありがとうございました!

+0

ねえを使用して試すことができます!トリガーから関数を呼び出さないでください理由は次のとおりです:http://dba.stackexchange.com/questions/10657/call-a-stored-procedure-from-a-trigger –

+0

'updateUser(" rank 1 " 、NEW.ID); 'あなたはちょうど' SET NEW.rank = 'rank 1';を使用することができます; –

+0

私は区切り文字を使うべきです – jophab

答えて

0

BEFORE更新トリガーを使用してください。しかし、あなたは本当に、この目的のために手順を使用することはできません。

CREATE TRIGGER update_user BEFORE UPDATE ON users 
FOR EACH ROW 
BEGIN 
    IF (NEW.totalPoints > 0 AND NEW.totalPoints < 200) 
    THEN 
     SET NEW.rank = 'rank 1'; 
    ELSEIF (NEW.totalPoints > 200 AND NEW.totalPoints < 400) 
    THEN 
     SET NEW.rank = 'rank 2'; 
    END IF; 
END; 

データがトリガーに使用することは困難になるだろう変更するストアドプロシージャを。

EDIT:まったくIFロジックで

SET NEW.RANK = (CASE WHEN NEW.totalPoints > 0 AND NEW.totalPoints < 200 
        THEN 'rank 1' 
        WHEN NEW.totalPoints > 200 AND NEW.totalPoints < 400 
        THEN 'rank 2' 
        ELSE NEW.RANK 
       END); 

次のようにこれを表現する場合。

+0

私はこれを試しましたが、エラーは6行目の ''の近くで同じです – Ary

0

は、区切り文字

DELIMITER $$  
    CREATE TRIGGER update_user AFTER UPDATE ON users 
    FOR EACH ROW 
    BEGIN 
     IF (NEW.totalPoints > 0 AND NEW.totalPoints < 200) 
     THEN 
      SET NEW.rank = 'rank 1'; 
     ELSEIF (NEW.totalPoints > 200 AND NEW.totalPoints < 400) 
     THEN 
      SET NEW.rank = 'rank 2'; 
     END IF; 
    END$$ 
    DELIMITER ; 
+0

いいえ、それはちょうどエラーを言う – Ary

+0

エラーコード? – jophab

+0

エラーコードがありません... – Ary

関連する問題