简体   繁体   English

Oracle:WHERE子句中的CASE条件语句不起作用?

[英]Oracle: CASE conditional STATEMENT in the WHERE Clause is not working?

I have below query with CASE statement and this is trowing "missing keyword error" 我在下面用CASE语句查询,这是由于出现“缺少关键字错误”

Can you please help. 你能帮忙吗?

 select *
   from podConfigKey_Tab PCK 
  WHERE 
   CASE WHEN (PCK.Keyid = 'TLMAPIConfigMgr.UseDB' 
              and  PCK.DEFAULTKEYIDVALUE = 'FALSE')
       THEN PCK.Keyid = 'TLMAPIConfigMgr.UseDB' 
   ELSE PCK.Keyid != 'TLMAPIConfigMgr.UseDB'
    END;

A case expression returns a single value, not a syntactic construct like a=b . case表达式返回单个值,而不是像a=b这样a=b语法构造。 You could, however, emulate this behavior with a series of logical operators: 但是,您可以使用一系列逻辑运算符模拟此行为:

SELECT *
FROM   podConfigKey_Tab PCK 
WHERE  PCK.DEFAULTKEYIDVALUE = 'FALSE' OR
       PCK.Keyid != 'TLMAPIConfigMgr.UseDB'

your query should be something more like as mentioned below (removed the else portion to make the below query work), you need to have predicate after the WHERE clause so that you can match value that is return by the CASE statment 您的查询应该更像如下所述(删除了else部分以使下面的查询起作用),您需要在WHERE子句之后有谓词,以便您可以匹配CASE语句返回的值

select * from podConfigKey_Tab PCK 
 WHERE PCK.Keyid =
 CASE WHEN (PCK.Keyid = 'TLMAPIConfigMgr.UseDB'  and  PCK.DEFAULTKEYIDVALUE = 'FALSE') THEN  'TLMAPIConfigMgr.UseDB' 
END ;

The Oracle CASE expression (like DECODE ) returns a value, but by itself it is not a predicate which can evaluate to TRUE or FALSE . Oracle CASE表达式(如DECODE )返回一个值,但它本身不是可以评估为TRUEFALSE的谓词。 You need to establish some condition such that the value returned by the CASE statement can be evaluated. 您需要建立一些条件,以便可以评估CASE语句返回的值。 For example: 例如:

with sample_data as 
      (select 'dog' pet, 'y' has_fur from dual union all
      select 'cat', 'y' from dual union all
      select 'bird', 'n' from dual)
select * 
from sample_data
where (case when has_fur = 'y' then 1 else 0 end) = 1;

SQL Fiddle Example SQL小提琴示例

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM