1

トリガーを実行しようとすると問題が発生します。

トリガーのMySQLクエリは次のとおりです。

delimiter //
CREATE TRIGGER `aggiornaProduzione`
BEFORE UPDATE ON `strutture` FOR EACH ROW
BEGIN
DECLARE temp bigint;
IF ( tipo=1/*mercato*/ AND old.livello <> new.livello )
THEN (
    SELECT round(2*livello*livello + 13.8*livello)
    FROM strutture WHERE tipo=1 AND city=old.city INTO temp;
    WHILE (temp%6<>0) temp=temp+1;
    END WHILE;
    UPDATE strutture SET produzione=temp WHERE city=new.city AND tipo=1;
    )
END IF;
END //

そして、エラーは

#1064 - SQL 構文にエラーがあります。near '; を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。WHILE (temp%6<>0) temp=temp+1; 終了まで; 8 行目の UPDATE 構造体 SET '

このエラーが発生する理由を誰かが知っていますか?

4

1 に答える 1

2

THEN句を囲む括弧を削除します。また、あなたのWHILE句は構文的に間違っています:

delimiter //
CREATE TRIGGER `aggiornaProduzione`
BEFORE UPDATE ON `strutture` FOR EACH ROW
BEGIN
DECLARE temp bigint;
IF ( tipo=1/*mercato*/ AND old.livello <> new.livello )
THEN
    SELECT round(2*livello*livello + 13.8*livello)
    FROM strutture WHERE tipo=1 AND city=old.city INTO temp;
    WHILE temp%6<>0 DO
      SET temp=temp+1;
    END WHILE;
    UPDATE strutture SET produzione=temp WHERE city=new.city AND tipo=1;
END IF;
END //
于 2013-10-27T18:28:49.497 に答える