Как управлять многозначными строковыми параметрами для команды SQL в Crystal Reports
У меня есть Crystal Report, основанный на команде SQL, который, в частности, состоит из имен процедур. То, что я пытаюсь сделать, это добавить строковый параметр с несколькими значениями в команду SQL так, чтобы конечные пользователи могли вводить частичные имена процедур, и отчет будет возвращать только те соответствующие процедуры, которые соответствуют строке.
Например, пользователь должен иметь возможность вводить "%KNEE%" и "%HIP%" в параметр и возвращать все процедуры, содержащие слова "KNEE" и "HIP". Проблема в том, что я не могу понять, как манипулировать значением параметра в SQL для достижения этой цели. Я сделал это раньше с параметром отчета (в отличие от параметра команды SQL), просто добавив строку {table.procedure_name} like {?name match parameter}
к формуле выбора записи, но использование того же подхода в команде SQL приводит меня к ошибке "ORA-00907: отсутствует правильная скобка".
Любые предложения о том, как я могу манипулировать многозначным строковым параметром для достижения этой цели?
2 ответа
Я не хотел бы публиковать это как ответ, потому что меня не волнует решение, но я нашел единственный способ обойти это. Мне пришлось поручить пользователям вводить "%KNEE%", "%HIP%", "%ETC%" в приглашении параметра. Тогда {table.procedure_name} как {? Name match parameter} должен работать в вашем SQL. Не оптимально, особенно для вашего сценария с%. Я хотел бы услышать, что кто-то предлагает лучшее решение, потому что я боролся с этим много раз.
Вот подход:
SELECT column0
FROM table0
INNER JOIN (
SELECT trim('%' || x.column_value.extract('e/text()') || '%') SEARCH
FROM ( SELECT 'arm,knee' options FROM dual ) t,
TABLE (xmlsequence(xmltype('<e><e>' || replace(t.options,',','</e><e>')|| '</e></e>').extract('e/e'))) x
) v ON column0 LIKE v.search
Используйте функциональные возможности Oracle Oracle для преобразования строки, разделенной запятыми, в эквивалентное количество строк, заключая каждое предложение в %%
, Затем присоедините эти строки к нужной таблице.
Чтобы использовать с CR, создайте строковый параметр с одним значением и добавьте его в код:
...
FROM ( SELECT '{?search_param}' options FROM dual ) t,
...