Where - Case语句导致ORA-00905:缺少关键字

问题描述 投票:0回答:1
select field1, field2
from table
where
(CASE
           WHEN :P_AccountType =  'B'  THEN  GLCC.SEGMENT2 <  '40000'
           WHEN :P_AccountType =  'P'  THEN  GLCC.SEGMENT2 >= '40000'
ELSE  
           GLCC.SEGMENT2 BETWEEN '00000' AND '99999' 
END)

无法查看缺少哪个关键字。请帮忙。见下面的背景。

用户可以选择账户类型A =试算账户'00000' - '99999'B = BS Accts'00000'-'39999'P = All IS Accts'40000' - '99999'此变量产生一个范围。所以:P_AccountType = B Segment2应该包含所有资产负债表帐户'00000' - '39999'等.segment2值是字符串

oracle case where
1个回答
0
投票

您无法使用案例表达式有选择地应用其他条件。在这种情况下,我认为当它击中<>=between时它会特别抱怨 - 它们都是错的,而不是解析器期望在那里看到的东西。 (它预计前两个会有另一个whenelseend;而第三个则是end。)

您可以使用布尔逻辑,例如:

select field1, field2
from table
where
   (:P_AccountType = 'B' and GLCC.SEGMENT2 <  '40000')
or (:P_AccountType = 'P' and GLCC.SEGMENT2 >= '40000')
or (:P_AccountType not in ('B', 'P') and GLCC.SEGMENT2 BETWEEN '00000' AND '99999')

或者从你的最后一段开始,最后一行可能是:

or (:P_AccountType = 'A' and GLCC.SEGMENT2 BETWEEN '00000' AND '99999')

我不确定'P'的第二个条件是否也需要一个上限;或者确实如果B需要一个下限。用字符串告诉它更难。 A案件可能根本不需要其范围检查。取决于你的数据。

© www.soinside.com 2019 - 2024. All rights reserved.