【问题标题】:JasperStudio Parameter with SQL String带有 SQL 字符串的 JasperStudio 参数
【发布时间】:2015-01-22 17:05:09
【问题描述】:

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

从 user = 1 的表中选择 * 和风险 = 'R'

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

我使用条件作为它自己的参数,并且只是将它设置为'1',当参数为 FALSE 时,两个语句将是:

1) 从 user = 1 的表中选择 * 和风险 = 'R'

2) 从 user = 1 的表中选择 * AND 1= 1

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

【问题讨论】:

    标签: sql parameters jasper-reports


    【解决方案1】:

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

    1. 声明参数:

    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>
    
    1. 报表查询
    <queryString>
      <![CDATA[select * from table where user = $P{UserID} and $P!{RisksCondition}]]>
    </queryString>
    

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

    希望这些信息有用

    【讨论】:

    • 感谢您的详细回答。我会在周末尝试并发布我的结果。
    • 是的,这正是我所需要的。非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    相关资源
    最近更新 更多