Как создать набор данных BIRT, который принимает несколько значений (CSV), которые можно использовать внутри предложения IN в операторе выбора
Я пытаюсь создать набор данных в отчете BIRT, который содержит оператор выбора с предложением "IN" и вместо запятой "?" Передается значение запятой. используя параметр BIRT, который принимает несколько значений.
Например: выберите * из таблицы, где ID в (?)
Я попытался добавить это в свой набор данных "select * from table, где ID in ( params["paramer_name"]. Value)", но это не работает.
Я не хочу использовать встроенный фильтр набора данных BIRT, потому что использование в запросе предложения "IN" значительно снижает стоимость запроса на моем сервере базы данных.
Есть ли простой способ сделать то же самое без добавления длинных сценариев Java???
К сведению: список параметров, которые выбирает пользователь, взят из другого набора данных, и я хочу использовать выбранное значение в качестве входных данных для другого набора данных.
Большое спасибо за вашу помощь...
1 ответ
Мы не можем сделать это с обычным параметром SQL '?'.
Обходной путь должен заменить это '?' по значению по умолчанию в запросе и динамически внедрить соответствующий разделенный запятыми список значений в сценарии beforeOpen набора данных:
Запрос по умолчанию
Предполагая, что тип данных ID является целым числом, настройте запрос следующим образом (конечно, используйте здесь действительный идентификатор, чтобы иметь возможность предварительного просмотра данных):
select * from table where ID in ( 1000 )
"beforeOpen" скрипт набора данных:
this.queryText=this.queryText.replaceAll('1000',params["parameter_name"].value.join(","));
Таким образом, если "имя_параметра" возвращает 3 значения 1100,1200,1300, запрос, отправленный в базу данных, будет:
select * from table where ID in ( 1100,1200,1300)
Это аналогично, если тип данных ID является строкой, нам просто нужно немного поиграть с кавычками. Однако при использовании типа String такая обработка делает возможными атаки SQL-инъекций. Сначала мы должны проверить, соответствуют ли значения параметров нашим ожиданиям.