2016-11-08 4 views
1

У меня есть запрос отчета JasperReports 6.3, в котором используется параметр «дата начала» как часть его предложения WHERE. Параметр может быть нулевым, что по сути означает «самая ранняя дата».Использование тернарного выражения внутри queryString

Логика очень проста:

WHERE MyDateField > ($P{StartDate} == null ? DateTime(0L) : $P{StartDate}) 

Но это производит исключение, когда JasperReports пытается выполнить запрос к базе данных:

SQLServerException: The value is not set for the parameter number 3

Как примечание стороны, было бы полезно выяснить, как заставить Jaspersoft Studio регистрировать сгенерированный SQL, чтобы помочь в отладке.

ответ

0

Невозможно использовать выражения в queryString. Вы должны создать другой параметр, содержащий нужное выражение.

В вашем случае код будет выглядеть следующим образом:

<parameter name="StartDate" class="org.joda.time.DateTime"/> 
... 
<parameter name="dateFilter" class="org.joda.time.DateTime"> 
    <defaultValueExpression><![CDATA[$P{StartDate} == null ? DateTime(0L) : $P{StartDate}]]></defaultValueExpression> 
</parameter> 
<queryString> 
    <![CDATA[SELECT * FROM sometable WHERE MyDateField > $P{dateFilter}]]> 
</queryString> 

Вы можете найти более подробную информацию об использовании параметров здесь:

Смежные вопросы