#oracle
#Oracle
Вопрос:
Я хочу показать все данные, если в условии where нет значения. Там будет указана дата. Однако для других параметров иногда может не быть значения.
Условие
ГДЕ (DATE = :date или :date равно нулю) И (CHANNEL_PARTNER В (:channel_partner) или :channel_partner равно нулю) И (CURRENT_BUCKET В (:current_bucket) или :current_bucket равно нулю)
Если в текущем сегменте имеется несколько значений, то получение синтаксической ошибки типа — AND (CURRENT_BUCKET В (‘1′,’2’) или (‘1′,’2’) равно нулю). Здесь после условия OR -> or (‘1′,’2’) значение null выдает синтаксическую ошибку. Пожалуйста, руководство
Комментарии:
1. почему бы просто не убрать другое условие, если вы не собираетесь включать их в свой запрос…
2. Важно также включить then иногда пользователю необходимо видеть всю дату, тогда не нужно указывать значение параметров. Или какие данные пользователь хочет, чтобы они вводили значение
3. нет, вы не можете просто задать условие и игнорировать его, либо создать функцию с динамическим запросом, либо убрать ее. и что вы имеете в виду, когда пользователь нуждается? вы разрешаете пользователю напрямую обращаться к вашей базе данных и писать запрос? разве у вас нет какого-нибудь интерфейса?
4. Это условие where, использующееся в параметризованной конвейерной функции, иногда по желанию пользователя означает, что если пользователь хочет просмотреть данные для восточной зоны, то в выпадающем списке выбирается опция East, и данные будут относиться к восточной зоне и к той конкретной дате, которую выбрал пользователь.. И если там нет значения параметра, то там будут только данные определенной даты, потому что поле даты является обязательным
Ответ №1:
Похоже, вы передаете значения из своего приложения.
Вы можете получить желаемый результат, используя OR
следующие условия:
WHERE (DATE = :date or :date is null)
AND (CHANNEL_PARTNER IN (:channel_partner) or :channel_partner is null)
AND (CURRENT_BUCKET IN (:current_bucket) or :current_bucket is null)
Комментарии:
1. @Popeye… однако это работает нормально, если имеется несколько текущих сегментов, то появляется синтаксическая ошибка. Если код поступает таким образом; (current_bucket в(‘1′,’2’) или (‘1′,’2’) равно нулю). Итак, здесь в этом условии -> OR (‘1′,’2’) равно нулю, что приводит к синтаксической ошибке. Если вы можете указать, как это удалить, пожалуйста, дайте мне знать.