Вы не можете выборочно применять другие условия, используя выражение регистра.В этом случае я думаю, что это особенно жаловаться, когда он попадает в <
, >=
или 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
может вообще не нуждаться в проверке диапазона.Хотя зависит от ваших данных.