Ошибка «ORA-00920: недопустимый реляционный оператор» - PullRequest
0 голосов
/ 09 октября 2019
select 
    ic.item_name,
    lh.locn_brcd from_locn,
    lh2.locn_brcd to_locn,
    wl.from_container,
    wl.to_container,
    wl.units,
    wl.prev_from_container_status prev_from_lpn_status, 
    wl.curr_from_container_status curr_from_lpn_status,
    wl.prev_to_container_status prev_to_lpn_status,
    wl.curr_to_container_status curr_to_lpn_status,
    wl.work_batch_number,
    wl.transaction_name,
    wl.action,
    wl.work_id,
    wl.date_updated,
    wl.source_updated,
    wl.tote_number,
    wl.chute     
from m_work_log wl     
    LEFT join item_cbo ic on wl.item_id=ic.item_id
    left join locn_hdr lh on wl.from_location_id = lh.locn_id
    left join locn_hdr lh2 on wl.to_location_id = lh2.locn_id    
where wl.action in (:action)    
    and trunc(wl.date_updated) between :start_date and :end_date
    and (ic.item_name in (:list) OR  
         wl.source_updated = :username OR 
         wl.to_container in (:LPNList) OR 
         (:list is null and :username is null and :LPNList is null)
        )
    order by date_updated desc

Привет всем,

, когда я запускаю этот код через Oracle SQL Developer и добавляю два элемента в параметр: list и два элемента в параметр: action, он работает нормально. Но когда я запускаю это через SSRS (построитель отчетов), он не запускается, и я получаю «ORA-00920: недопустимый реляционный оператор». Я новичок в SQL, и я не уверен, что я делаю здесь неправильно. Любая помощь очень ценится. Спасибо!

1 Ответ

1 голос
/ 09 октября 2019

Есть 2 способа сделать это:

  1. Параметр с несколькими значениями: Прежде всего, вы должны использовать провайдера Oracle, параметры с несколькими значениями не работают ни с соединениями ODBC, ни с OLEDB ( ссылка ). Вот внешняя ссылка, подробно объясняющая здесь .

  2. Использование выражения в качестве запроса путем помещения всего этого, как это ="query_here"

="select "
+ "    ic.item_name,"
+ "    lh.locn_brcd from_locn,"
+ "    lh2.locn_brcd to_locn,"
+ "    wl.from_container,"
+ "    wl.to_container,"
+ "    wl.units,"
+ "    wl.prev_from_container_status prev_from_lpn_status,"
+ "    wl.curr_from_container_status curr_from_lpn_status,"
+ "    wl.prev_to_container_status prev_to_lpn_status,"
+ "    wl.curr_to_container_status curr_to_lpn_status,"
+ "    wl.work_batch_number,"
+ "    wl.transaction_name,"
+ "    wl.action,"
+ "    wl.work_id,"
+ "    wl.date_updated,"
+ "    wl.source_updated,"
+ "    wl.tote_number,"
+ "    wl.chute"
+ "from m_work_log wl"
+ "    LEFT join item_cbo ic on wl.item_id=ic.item_id"
+ "    left join locn_hdr lh on wl.from_location_id = lh.locn_id"
+ "    left join locn_hdr lh2 on wl.to_location_id = lh2.locn_id"
+ "where wl.action in (:action)"
+ "    and trunc(wl.date_updated) between :start_date and :end_date"
+ "    and (ic.item_name in ('" + Join(Parameters!list.Value , "', '")" + ') OR"
+ "         wl.source_updated = :username OR"
+ "         wl.to_container in ('" + Join(Parameters!LPNList.Value , "', '")" + ') OR"
+ "         (:list = '_N/A_' and :username is null and :LPNList = '_N/A_')"
+ "        )"
+ "    order by date_updated desc"

В этом случае вам нужно будет предоставить пустые значения по умолчанию для ваших списков. Я использовал ' N / A ' в моем примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...