У меня есть таблица элементов, каждый из которых имеет идентификатор элемента (int). Я хочу отображать только элементы с идентификаторами элементов на основе строки. Например, я хочу отобразить элементы «12, 1005, 2». Эта строка каждый раз разная. Как бы я это сделал?
SQL Как отображать поля только из списка чисел
Ответы (3)
Если вы используете Oracle, вы можете использовать IN:
select from item i where i.id in (12,1005,2)
string a = "12,1005,2"
, как бы я использовал это в SQL-запросе?
- person Kevin; 20.08.2014
ваш параметр всегда состоит из 3 чисел или он может отличаться во время выполнения?? если это исправлено, вы можете использовать substr и instr для вырезания
Я бы рассмотрел подход, задокументированный Джастином Кейвом, с вопросом Как выбрать из списка значений в Oracle. Том Кайт документирует аналогичный подход (без регулярных выражений) на своем сайте Ask Tom.
Поскольку вы находитесь в среде Oracle Apps и используете Oracle Reports, я просто приведу пример с использованием таблицы элементов:
with x as
( select '12, 1005, 2' str from dual
)
select *
from inv.mtl_system_items_b item
where item.organization_id =
&org_id
and item.inventory_item_id in
(select to_number(regexp_substr(str,'[^,]+',1,level)) element
from x
connect by level <= length(regexp_replace(str,'[^,]+')) + 1
)
Процедурно в отчетах Oracle вы можете создать функцию как программный модуль, который выполняет этот синтаксический анализ этого параметра значения, разделенного запятыми, используя аналогичную логику (опять же, см. Функция списка синтаксического анализа Джастина Кейва (ответ, связанный с вопросом, на который я ссылаюсь выше).