2017-03-02 148 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分钟,但我会确保做到这一点:) –