I've looked into all other questions regarding this topic and I followed all steps mentioned there, however I'm still getting an error when trying to pass an entire SQL statement as Parameter.
This is my SQLQuery Parameter:
<parameter name="SQLTag" class="java.lang.String">
<defaultValueExpression><![CDATA["SELECT * FROM REPORT_VER WHERE TAG BETWEEN $P{Von} AND $P{Bis}"]]></defaultValueExpression>
</parameter>
I've checked it and the SQL works perfectly fine when passed directly into the Report SQL field. However because I want to have conditional SQL queries I need them passed through a parameter. Anyone knows what I'm missing?
I tried to use $P{SQLTag}
and $P!{SQLTag}
expressions at queryString/
Stack trace:
net.sf.jasperreports.engine.JRException: net.sf.jasperreports.engine.JRException: Error executing SQL statement for: Abnahme.
at com.jaspersoft.studio.editor.preview.view.control.ReportControler.fillReport(ReportControler.java:548)
at com.jaspersoft.studio.editor.preview.view.control.ReportControler.access$20(ReportControler.java:523)
at com.jaspersoft.studio.editor.preview.view.control.ReportControler$5.run(ReportControler.java:404)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Caused by: net.sf.jasperreports.engine.JRException: Error executing SQL statement for: Abnahme.
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:344)
at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1245)
at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:723)
at net.sf.jasperreports.engine.fill.BaseReportFiller.setParameters(BaseReportFiller.java:438)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:550)
at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFill.run(BaseFillHandle.java:123)
In case using parameters at defaultValueExpression you should operate with them as a common Java variable.
For example:
<parameter name="fieldFilter" class="java.lang.String">
<defaultValueExpression><![CDATA["someValue"]]></defaultValueExpression>
</parameter>
<parameter name="query" class="java.lang.String">
<defaultValueExpression><![CDATA["SELECT * FROM some_table WHERE some_field = '" + $P{fieldFilter} + "'"]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[$P!{query}]]>
</queryString>
or like this:
<parameter name="intFieldFilter" class="java.lang.Integer">
<defaultValueExpression><![CDATA[2017]]></defaultValueExpression>
</parameter>
<parameter name="strFieldFilter" class="java.lang.String">
<defaultValueExpression><![CDATA["someValue"]]></defaultValueExpression>
</parameter>
<parameter name="query" class="java.lang.String">
<defaultValueExpression><![CDATA[String.format("SELECT * FROM some_table WHERE some_field = '%1$s' AND trunc(date_field, 'yyyy') = trunc(to_date(%2$d, 'yyyy'), 'yyyy')", $P{strFieldFilter}, $P{intFieldFilter})]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[$P!{query}]]>
</queryString>