0

わかりました..これは奇妙に見えるかもしれませんが、ifステートメントの複数の条件の中でどの条件が満たされたかを見つける方法はありますか? MySql 5.1 でトリガーを作成していますが、特定の条件でエラーを発生させる必要があります。以下のコードのようなことをしたいのですが、

if(new.col1 = 'A' and (new.col2 is null or new.col3 is null) {
    //if new.col1 = 'A' and **new.col2** was null
    set msg = '<col2> cannot be null';
}
if(new.col1 = 'B' and (new.col4 is null or new.col5 is null) {
    //if new.col1 = 'B'and **new.col5** was null
    set msg = '<col5> cannot be null';
}

これに対する解決策が得られれば、1000 秒のifループを節約できます!!!

4

1 に答える 1

2

SIGNALステートメントを使用してエラーを発生させることができます -

IF NEW.col1 = 'A' AND (NEW.col2 IS NULL OR new.col3 IS NULL) THEN
  SIGNAL SQLSTATE VALUE '20001' SET MESSAGE_TEXT = 'col2 cannot be null';
ELSEIF NEW.col1 = 'B' AND (NEW.col4 IS NULL OR new.col5 IS NULL) THEN
  SIGNAL SQLSTATE VALUE '20001' SET MESSAGE_TEXT = 'col5 cannot be null';
END IF;

SIGNAL コマンドは、MySQL 5.5 以降で使用できます。

MySQL 5.1 を使用しているため、回避策を使用できます -

IF NEW.col1 = 'A' AND (NEW.col2 IS NULL OR new.col3 IS NULL) THEN
  CALL `col2 cannot be null()`;
ELSEIF NEW.col1 = 'B' AND (NEW.col4 IS NULL OR new.col5 IS NULL) THEN
  CALL `col5 cannot be null()`;
END IF

この場合、エラー メッセージは期待どおりにはなりませんが、コードが中断され、エラーが発生します。

于 2013-04-26T06:06:01.387 に答える