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值是字符串
您无法使用案例表达式有选择地应用其他条件。在这种情况下,我认为当它击中<
,>=
或between
时它会特别抱怨 - 它们都是错的,而不是解析器期望在那里看到的东西。 (它预计前两个会有另一个when
或else
或end
;而第三个则是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
案件可能根本不需要其范围检查。取决于你的数据。