Использование NVL в предложении where для параметра - PullRequest
0 голосов
/ 15 октября 2018

Прямо сейчас у меня есть следующий запрос:

select INVOICE_ID, INVOICE_NUM, VENDOR_NUM, STATUS, GROUP_ID
from AP_INVOICES_INTERFACE 
and status in(:p_status)
and last_update_date between :p_date_from and :p_date_to
order by last_update_date, group_id

Но это показывает, только если статус «отклонен» или «обработан».Мне нужно, чтобы оно также показывало, когда статус нулевой.Как бы я включил NVL, чтобы показать это?

Не уверен, что эта информация актуальна, но список значений для статуса имеет запрос как

SELECT DISTINCT STATUS 
FROM AP_INVOICES_INTERFACE

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Похоже, NVL не то, что вам нужно.

Попробуйте что-то вроде этого:

select INVOICE_ID, INVOICE_NUM, VENDOR_NUM, STATUS, GROUP_ID
from AP_INVOICES_INTERFACE 
where last_update_date between :p_date_from and :p_date_to 
and (status is null or status in(:p_status))
order by last_update_date, group_id;
0 голосов
/ 16 октября 2018

Если вам нужно nvl, чтобы также поймать, когда status = null, кроме того, что он 'отклонен' или 'обработан', вы можете попробовать это:

...
where nvl(status,'processed') in (:p_status)
  and ...

Таким образом, если statusnull, nvl преобразует свое значение в 'process' и вернет true для этого условия.

0 голосов
/ 15 октября 2018

Попробуйте:

select INVOICE_ID, 
       INVOICE_NUM, 
       VENDOR_NUM, 
       STATUS, 
       GROUP_ID
  from AP_INVOICES_INTERFACE 
 where (status in (:p_status) OR status is null)
   and last_update_date between :p_date_from and :p_date_to
 order by last_update_date, 
          group_id

Вам необходимо закрыть область проверки статуса, чтобы правильно использовать «ИЛИ»

...