2017-12-13 13 views
1

にケースを使用しているとき、私はcasewhereで句を使用しますが、エラーを取得しています:missing keywordWhere句

SQL:

SELECT * 
FROM tmp t 
WHERE 
    CASE :p_flag WHEN 'Y' 
       THEN t.call_destination NOT IN ('Premium', 'Satellite') 
       ELSE t.call_destination LIKE call_destination 
    END; 
+0

'ELSE t.call_destination LIKE call_destination' ...これは意味をなさない。実際のelseロジックは何ですか? –

答えて

1

CASE表現の述語は単一の値である必要がありますに他の表現ではありません。

SELECT * 
FROM tmp t 
WHERE 
    (:p_flag = 'Y' AND t.call_destination NOT IN ('Premium','Satellite')) OR 
    (:p_flag <> 'Y' AND t.call_destination LIKE call_destination); 
--            ^^^ not sure about this 

私はそれは常にtrueを返しますので、意味をなすようには見えません。あなたが作っているLIKE比較を強調している:私が正しくあなたのWHERE句を読んでいる場合は、次のように問合せを修正することができるはずです。

+0

幸運はありません。エラー - 表現が欠落しています。 –

+0

p_flagが 'Y'のときは 'Premium'、Satelliteを除外します。 –

+2

私のコードに問題はありません。おそらくあなたはそれを間違ってコピーしました。 –