2017-03-02 6 views
0

私は、指定された値がxまたはyと等しくないかどうかを確認する必要があるPL/SQLのプロシージャを作成しています。PL SQLの文字列の比較

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

さて、p_campaignPaymentTypeに与えられた文字列は、「毎月」や「創造ごと」であったとしても、それは例外を発生させex_invalidPaymentType:私は確認するには、次のコードを使用します。

IF文の問題は何ですか?また、私は何を検査の代わりにすることができますか?

+0

'||'で文字列連結演算子、論理的ではない 'OR'演算子(たとえそれはとにかく誤って使用されるだろう)。 'OR'演算子を使用してください。 –

+0

@ nicholas-krasnov '||'の代わりに 'OR'を使用すると、次のエラーが発生しました:エラー(53,46):' PLS-00382:式が間違ったタイプです ' –

+1

まず、OR演算子「OR演算子を使用する」というフレーズでは、もちろん「AND」と言っていました。 2つの論理的条件の間に配置する必要があります。 –

答えて

3

||は、文字列連結演算子であり、論理演算子または演算子ではないと私は思っています。だから、あなたのスニペットは、実際に意味:

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

しかし、任意の文字列がいずれか'per month'または'per creation'と等しくないとして、それは論理or演算子であったとしても、それはまだ、間違っているだろう(例えば、'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分あなたの答えを受け入れることはできませんが、私はそれを行うことを確認します:) –