ORA-00936: отсутствует выражение, использующее подсказку - PullRequest
0 голосов
/ 24 февраля 2019

Невозможно получить CASE, КОГДА работать в моем запросе с использованием переменной.

select field1, field2
from table
where 1=1
AND GLCC.SEGMENT2 
    (CASE
    WHEN :P_AccountType =  'B' THEN  < 40000
    WHEN :P_AccountType =  'P' THEN => 40000
    ELSE
    BETWEEN '00000' AND '99999'
    END)

любая идея, где / что я делаю не так

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Я думаю, вам нужен такой порядок сортировки, как показано ниже:

SELECT field1, field2
  FROM "table"
 WHERE  
     (CASE
      WHEN :P_AccountType =  'B' AND SEGMENT2 <  '40000' THEN  1
      WHEN :P_AccountType =  'P' AND SEGMENT2 >= '40000' THEN  1
      ELSE  
          CASE WHEN SEGMENT2 BETWEEN '00000' AND '99999' THEN  1 END 
          --> the above case line is needed when :P_AccountType is neither "B", nor "P"
      END) = 1
0 голосов
/ 24 февраля 2019

Я не думаю, что переменная является проблемой, вы не можете построить предложение 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'))

или что-то в этом роде (не в состоянии проверить!)

...