2013-04-26 56 views
0

好吧..这可能看起来很奇怪,但有什么办法找到其条件是多个条件中满足的if语句?我在MySql 5.1中编写了一个Trigger,并且我必须在某些情况下引发一个错误。 我想要做类似下面的代码,的MySQL查找该条件满足,如果

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循环!

回答

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; 

信号命令是在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 

在这种情况下也不会达到预期的错误消息,但该代码将被中断,错误会得到提升。

+0

嗨。感谢您的回复。但提出错误不是我的问题。我已经使用CALL。但请参阅错误消息,我想根据if语句中满足的条件构造一条错误消息。如果COL2为null,则我的消息是“COL2不能为空”,如果COL3为null,则“COL3不能为空” 我已经编辑我的问题一点点。 – user1120946 2013-04-26 06:30:37

+0

嗯,我明白了。似乎它不能自动化。 – Devart 2013-04-26 06:42:37

+0

你不能在列定义中使用NOT NULL选项吗?它可以帮助你约束插入NULL值。 – Devart 2013-04-26 06:43:56