У вас не может быть оператора case
, который запускает один из двух операторов select
. Таким образом, основная структура того, что у вас есть, не сработает. Этот код находится в процедуре (или другом блоке PL / SQL), где current_date
является локальной переменной? Если это так, вы потенциально хотите вместо этого IF
оператор. Потенциально, вы просто хотите один запрос с OR
предложением
select *
from CUSTOMER_ORDER_JOIN
where (( TO_CHAR (current_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') = 'TUE'
and PLANNED_DUE_DATE between to_date(current_date + 1)
and to_date(current_date + 3))
OR
( TO_CHAR (current_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') != 'TUE'
and PLANNED_DUE_DATE between to_date(current_date - 1)
and to_date(current_date + 1)))
and customer_no not in ('1000', '2000')
and state not in( 'Delivered')
Хотя я не изменил его, очень маловероятно, что вы действительно хотите to_date( current_date + n)
в своем коде. Предполагая, что current_date
является date
, вызов to_date
в идеале ничего не делает, но потенциально вызывает сбои, неявно приводя date
к varchar2
только для явного преобразования обратно в date
. Это может произойти сбой в зависимости от таких параметров, как настройки NLS сеанса. Если current_date
содержит компонент, не относящийся к полуночи, который вы пытаетесь игнорировать, вы реально хотите вместо него trunc(current_date) + n
.