[英]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
)返回一个值,但它本身不是可以评估为TRUE
或FALSE
的谓词。 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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.