17

MySQL データベースのトリガーを定義するのに問題があります。(特定の条件下で)新しい行を挿入する前にテキストフィールドを変更したい。これは私が試したことです:

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue
FOR EACH ROW BEGIN
  IF (NEW.sHeaders LIKE "%support@mydomain.com%") THEN
    SET NEW.sHeaders = NEW.sHeaders + "BCC:internal@mydomain.com";
  END IF;
END; 

しかし、常に「間違った構文」というエラーが表示されます。行き詰まりました、何が間違っていますか? MySQL 5.0.51a-communityを使用しています

ところで:このように空のトリガーを作成するとうまくいきます:

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue
FOR EACH ROW BEGIN
END; 

しかし、これも失敗します:

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue 
FOR EACH ROW BEGIN
  IF 1=1 THEN
  END IF; 
END;

stackoverflow.com を使用するのは初めてなので、ここに何か投稿するのが役に立ったらとても興奮しています :-)

4

1 に答える 1

29

区切り文字を変更する必要があります - MySQL は最初の「;」を認識しています。CREATE TRIGGER ステートメントの終わりとして。

これを試して:

/* Change the delimiter so we can use ";" within the CREATE TRIGGER */
DELIMITER $$

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue
FOR EACH ROW BEGIN
  IF (NEW.sHeaders LIKE "%support@mydomain.com%") THEN
    SET NEW.sHeaders = NEW.sHeaders + "BCC:internal@mydomain.com";
  END IF;
END$$
/* This is now "END$$" not "END;" */

/* Reset the delimiter back to ";" */
DELIMITER ;
于 2009-01-22T16:38:27.637 に答える