在Where子句中使用Case时缺少关键字

时间:2017-12-13 06:22:47

标签: oracle plsql

我在case子句中使用where但收到错误:missing keyword

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;

1 个答案:

答案 0 :(得分:2)

CASE表达式的谓词必须是单个值,而不是另一个表达式。如果我正确阅读了您的WHERE条款,您应该能够按如下方式重新查询您的查询:

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

我已经突出显示了您正在进行的LIKE比较,这似乎没有意义,因为它总会返回true。