我有一个用Jaspersoft Studio制作的报告,在数据集查询中,我需要使用IN子句,因为我正在使用表达式"$X{IN ..."
问题#1:该参数使用的正确类型是什么?我正在使用以下格式:
问题#2:如何在预览中进行测试?参数屏幕:
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9nVHFlQS5wbmcifQ==” alt =“在此处输入图像描述”>
为提供帮助,请遵循使用了参数的节选摘录:
"...Where (($X{IN, db.empresa, paramIdEmpresa}) OR $ P!{ParamIdEmpresa} IS NULL) and (db_view ... "
带有以上参数的预览中出现的错误:
net.sf.jasperreports.engine.JRException: Error executing SQL statement
for: unit1. at com.jaspersoft.studio.editor.preview.view.control.ReportController.fillReport
(ReportController.java:551) at com.jaspersoft.studio.editor.preview.view.control.ReportController.access
(BaseFillHandle.java:135) at java.lang.Thread.run (Thread.java:748)
Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at
or near "[" Position: 199 at
org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse
(QueryExecutorImpl.java:2440) at
org.postgresql.core.v3.QueryExecutorImpl.processResults
问题出在查询中,而不是在碧玉中...
正确的查询是:
where
(($X{IN,db.idempresa, paramIdEmpresa}) OR db.idempresa IS NULL )
感谢GP ...
嗯...好吧,对于每个经历这场噩梦的人,解决它的最佳方法很简单:创建一个名为$ P!{paramWhere}的参数。在您的应用程序中,您传递了此参数的完整where子句,例如“ id = 200”。
在jasper中的查询中,您将其输入如下:“ ...从$ P中选择*!{paramWhere} ...”就这样,它将神奇地起作用。