Передача операторов SQL для запроса через параметр iReport

Я пытаюсь создать отчет в iReport на основе запроса Oracle oracle, который занимается транзакциями. Фактические вовлеченные таблицы очень длительны и не имеют отношения к проблеме. Я пытаюсь создать отчет, который будет возвращать результаты, когда суммы транзакций соответствуют 1 из следующих трех критериев:

  • между 1000.00 и 2499.99
  • между 2500.00 и 9999.99
  • > = 10000,00

Я пытаюсь создать один параметр списка выбора, когда человек, выполняющий отчет, может выбрать один из указанных выше спецификаций. Прежде чем я действительно создаю параметр, я пытаюсь проверить запрос в SQL Developer. Строка запроса, где я пытаюсь реализовать это:

alias.transaction_amount :amountRange 

и мой тестовый ввод «от 1000 до 9999». Когда это запрограммировано в запросе, оно работает нормально, но когда я пытаюсь передать его через этот ввод, я получаю ошибку «Недействительный реляционный оператор».

Есть ли другой способ сделать это?

    Попробуйте использовать это в запросе:
    выберите … из таблицы1, где transaction_amount $ P! {paramReport}

    Из руководства JasperReports Ultimate:

     $P{paramName} Syntax The parameters are used like normal java.sql.PreparedStatement parameters, using the following syntax: <queryString> <![CDATA[ SELECT * FROM Orders WHERE OrderID <= $P{MaxOrderID} ORDER BY ShipCountry ]]> </queryString> $P!{paramName} Syntax Sometimes it is useful to use parameters to dynamically modify portions of the SQL query or to pass the entire SQL query as a parameter to the report-filling routines. In such cases, the syntax differs a little, as shown in the following example. Notice the ! character: <queryString> <![CDATA[ SELECT * FROM $P!{MyTable} ORDER BY $P!{OrderByClause} ]]> </queryString> 

    Поговорив с некоторыми коллегами, мы обнаружили лучшее решение этой проблемы, хотя я не знаю, действительно ли метод, который я искал, возможно, это решение гораздо более интуитивно.

     alias.transaction_amount between (CASE WHEN $P{Range} = 0 THEN 1000.00 WHEN $P{Range} = 1 THEN 2500.00 ELSE 10000.00 END) and (CASE WHEN $P{Range} = 0 THEN 2499.99 WHEN $P{Range} = 1 THEN 9999.99 ELSE 9999999.99 END) 

    Использование операторов case с параметром switch отлично работает, если вы когда-либо совершаете транзакцию, которая составляет 1 миллиард долларов или больше, они будут исключены, но максимальное количество может быть скорректировано по мере необходимости.