Я не думаю, что переменная является проблемой, вы не можете построить предложение WHERE с таким синтаксисом, насколько я вижу.
Кроме того, для чего 1 = 1?
И, конечно же, => должно быть наоборот.
И почему вы используете числовое представление числа в двух местах и одного символа в другом?
Попробуйте
select field1, field2 from table
where (GLCC.SEGMENT2 < 40000 and :P_AccountType = 'B')
or (GLCC.SEGMENT2 >= 40000 and :P_AccountType = 'P' )
or (GLCC.SEGMENT2 BETWEEN 0 AND 99999 and :P_AccountType not in ('B','P'))
или что-то в этом роде (не в состоянии проверить!)