2013-04-26 59 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