16

列のあるテーブルstaffがありofficeます。現在、office列はNULL値を受け入れません。このテーブルに永続化するアプリケーションにはバグがあり、スタッフにオフィスが割り当てられていない場合、テーブルにNULL値を挿入しようとします。

トリガーを使用してStaffテーブルへの挿入をインターセプトし、office値がNULLであるかどうかを確認して、値に置き換えるように求められましたN/A

以下はこれまでの私の試みですがerror、実装しようとしています。これを解決する方法に関するアイデア。

CREATE TRIGGER staffOfficeNullReplacerTrigger BEFORE INSERT ON Staff
  FOR EACH ROW BEGIN
    IF (NEW.office IS NULL)
     INSERT INTO Staff SET office="N/A";
    END IF
  END;

エラー:

MySQLデータベースエラー:SQL構文にエラーがあります。'INSERT INTO Staff SET office = "N / A"の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。終わり'

4

3 に答える 3

24

まず、NULLを許可するようにテーブルを変更します。

ALTER TABLE Staff MODIFY office CHAR(40) DEFAULT "N/A";

(適切なものに変更CHAR(40)してください。)次に、トリガーとして使用できます。

CREATE TRIGGER staffOfficeNullReplacerTrigger 
BEFORE INSERT 
ON Staff
  FOR EACH ROW BEGIN
    IF (NEW.office IS NULL) THEN
      SET NEW.office = "N/A";
    END IF
于 2012-10-11T10:29:10.340 に答える
4

それはこのようなものであるべきではありません:

DELIMITER $$

CREATE TRIGGER staffOfficeNullReplacerTrigger BEFORE INSERT ON Staff
FOR EACH ROW BEGIN
   IF (NEW.office IS NULL) THEN
        INSERT INTO Staff(office) VALUES("N/A");
   END IF;
END$$
于 2012-10-11T09:26:14.313 に答える
2
CREATE TRIGGER staffOfficeNullReplacerTrigger BEFORE INSERT ON Staff
  FOR EACH ROW BEGIN
    IF (NEW.office IS NULL)
     INSERT INTO Staff SET office="N/A";
    END IF

; ENDIFの後にセミコロンを追加します

  END;
于 2012-10-11T10:36:03.190 に答える