2017-03-02 202 views
0

我正在寫一個PL/SQL過程,我需要檢查給定的值是否不等於xy。我用下面的代碼來檢查:PL SQL字符串比較

IF p_campaignPaymentType != 'per month' || 'per creation' THEN 
    RAISE ex_invalidPaymentType; 
END IF; 

現在,即使在p_campaignPaymentType給出的字符串爲「每月」或「每創造」,它引發異常ex_invalidPaymentType。

IF句子的問題是什麼,和/或我可以做些什麼來作爲檢查的替代方法?

+0

''||是字符串連接運算符,而不是邏輯'或'操作(即使反正它會被錯誤地使用)。使用'OR'運算符。 –

+0

@ nicholas-krasnov使用'OR'而不是'||'導致以下錯誤:錯誤(53,46):'PLS-00382:表達式類型錯誤' –

+1

首先,對於'OR'運算符在「使用'OR'運算符」這個短語中,當然這是我打算說'AND'的錯字。你需要把它放在兩個邏輯條件之間。 –

回答

3

||是字符串concatination操作符,而不是邏輯或運算符,我認爲你假設它是。所以,你的代碼段實際上意味着:

IF p_campaignPaymentType != 'per monthper creation' THEN 
    RAISE ex_invalidPaymentType; 
END IF; 

但即使它是邏輯or運營商,它仍然是錯誤的,因爲任何字符串或者不等於'per month''per creation'(例如,'per month'不等於'per creation')。相反,你應該使用邏輯and操作:

IF p_campaignPaymentType != 'per month' AND 
    p_campaignPaymentType != 'per creation' THEN 
    RAISE ex_invalidPaymentType; 
END IF; 

或者,更優雅的not in操作:

IF p_campaignPaymentType NOT IN ('per month', 'per creation') THEN 
    RAISE ex_invalidPaymentType; 
END IF; 
+1

乾杯!這解決了我的問題。我無法接受你的答案7分鐘,但我會確保做到這一點:) –