带有 SQL 字符串的 JasperStudio 参数

JasperStudio Parameter with SQL String

我正在尝试在 JasperStudio 中创建动态 SQL 查询。

Select * 来自 table 其中用户 = 1 和风险 = 'R'

条件,只应在数据库上执行,当某个参数设置为 TRUE(或 1)时。 如果此参数为 FALSE,则查询应忽略条件。 我想到了以下几点:

我使用条件作为它自己的参数,当参数为 FALSE 时将其设置为“1”,因此两个语句将是:

1) Select * 来自 table 其中用户 = 1 和风险 = 'R'

2) Select * 来自 table 其中用户 = 1 AND 1= 1

但不知何故,这不起作用。有一个更好的方法吗?由于我正在访问两个不同的数据库,因此将设置 TRUE-FALSE 参数,并且 RISKS 列只存在于一个 table(无法添加该列)。

这可以使用查询块来完成(当您输入查询 $!P{PARAM_NAME} 而不是 $P{PARAM_NAME} 时)。 请看下面的例子:

  1. 声明参数:

a) UserId 参数,您将传递给查询:

<parameter name="UserID" class="java.lang.Integer"/>

b) UseRiskParam - 是你的 "certain parameter which can be true or false"

<parameter name="UseRiskParam" class="java.lang.Boolean"/>

c) 风险参数 - 如果 UseRiskParam = true

,它将应用于 RISKS 列
<parameter name="Risks" class="java.lang.Integer"/>

d) 现在我定义生成附加条件的参数。这个参数应该隐藏。它根据 UseRiskParam 的值生成附加条件。当它为真时,条件看起来像 "RISKS = 1" 否则它将是“1 = 1”

<parameter name="RisksCondition" class="java.lang.Integer" isForPrompting="false">
    <defaultValueExpression><![CDATA[$P{UseRiskParam} ? "RISKS = " + ($P{Risks} == null ? "null" : $P{Risks}.toString()) : " 1 = 1"]]></defaultValueExpression>
</parameter>
  1. 报表查询
<queryString>
  <![CDATA[select * from table where user = $P{UserID} and $P!{RisksCondition}]]>
</queryString>

因为 $P!{RisksCondition}! 一起传递,它作为 sql 语句的一部分传递,而不是作为查询参数传递。

希望此信息有用