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)
看不到哪个关键字丢失。请帮助。请参阅下面的背景。
用户可以选择Accountype A =试用余额帐户'00000'-'99999'B = BS帐户'00000'-'39999'P =所有IS帐户'40000'-'99999'此变量产生一个范围。因此:P_AccountType = B Segment2应该包含所有资产负债表帐户'00000'-'39999'等。segment2的值是字符串
答案 0 :(得分:0)
您不能使用case表达式有选择地应用其他条件。在这种情况下,我认为这是在抱怨它碰到<
,>=
或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
情况可能根本不需要范围检查。不过要取决于您的数据。