powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / прошу помощи с reports, select и условием
3 сообщений из 3, страница 1 из 1
прошу помощи с reports, select и условием
    #39858943
Sotmaria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добрый день!

Заранее извиняюсь за глупый вопрос, только недавно начала работать с Oracle.
У меня не работает иерархический запрос только в части условия where. Ощущение, что накосячила с синтаксисом.

where case when :kn_active_units=1 then

to_date(:p_date,'dd.mm.yyyy') BETWEEN nvl(DATE_FROM, '01.01.2001') AND nvl(DATE_TO, '31.12.2999')

else 1=1 end


Что здесь происходит:
когда в форме стоит галка :kn_active_units, переданная в reports как параметр,
должно выполняться условие, чтобы выводились только документы на текущую дату.

Без условия по кнопке эта строка работает:

where to_date(:p_date,'dd.mm.yyyy') BETWEEN nvl(DATE_FROM, '01.01.2001') AND nvl(DATE_TO, '31.12.2999')

а вот оператор Case выполняться не хочет, пишет ошибку "нужно ключевое слово". Помогите, пожалуйста
...
Рейтинг: 0 / 0
прошу помощи с reports, select и условием
    #39858947
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нельзя case-ом менять текст запроса.
Если уж прям хотите case, сделайте второй уровень

Код: plsql
1.
 select from (select case ... end case_column from ...) where case_column ...



Или условие напишите, чтобы оно меняло не запрос, а данные.

Код: plsql
1.
2.
3.
4.
5.
6.
with t(id) as (select 1 from dual union all select 2 from dual)
select id
 from t
where
case when id = 1 then 'адын' else to_char(id) end = 'адын'
-- decode(id, 1, 'адын', id) = 'адын'
...
Рейтинг: 0 / 0
прошу помощи с reports, select и условием
    #39858950
ln123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sotmaria,

Как уже выше написали case таким образом использовать нельзя, и нужно научиться выражать условия через or и and, так ваше условие эквивалентно условию
Код: plsql
1.
where nvl(:kn_active_units,0) !=1 or to_date(:p_date,'dd.mm.yyyy') BETWEEN nvl(DATE_FROM, '01.01.2001') AND nvl(DATE_TO, '31.12.2999') 
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / прошу помощи с reports, select и условием
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]