我正在尝试在JasperStudio中创建一个动态SQL查询。
从表中选择*,其中user = 1 AND RISKS =' R'
当某个参数设置为TRUE(或1)时,条件应仅在数据库上执行。 如果此参数为FALSE,则查询应忽略条件。 我想到了以下几点:
我使用条件作为自己的参数,只需设置它' 1',当参数为FALSE时,这两个语句将是:
1)从表中选择*,其中user = 1 AND RISKS =' R'
2)从表中选择*,其中user = 1 AND 1 = 1
但不知何故,这不起作用。有一个更好的方法吗?由于我正在访问两个不同的数据库,因此将设置TRUE-FALSE参数,并且RISKS列仅存在于一个表中(无法添加该列)。
答案 0 :(得分:1)
这可以使用查询块(当您放入查询$!P{PARAM_NAME}
而不是$P{PARAM_NAME}
时)来完成。
请看下面的示例:
a)UserId参数,您将传递给查询:
<parameter name="UserID" class="java.lang.Integer"/>
b)UseRiskParam - 是您的“某些参数,可以是真或假”
<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>
<queryString> <![CDATA[select * from table where user = $P{UserID} and $P!{RisksCondition}]]> </queryString>
因为$P!{RisksCondition}
与!
一起传递,所以它作为sql语句传递,但不作为查询参数传递。
希望此信息有用