【问题标题】:BIRT multi select parameter and where statementBIRT多选参数和where语句
【发布时间】:2015-03-04 23:36:05
【问题描述】:

我正在尝试向我的报告中添加一个参数,该参数将创建一个这样的 where 子句...

WHERE 1 = 1
AND ((ID = id3 AND CLASS = class3) OR (ID = id1 AND CLASS = class1) OR (ID = id2 AND CLASS = class2))

当我在 SQL NAV 中运行该语句时,该语句有效。这就是我的 BIRT 报告中的内容,它没有给我任何错误,只是一个空白报告......

+ " WHERE 1=1 "
+ " AND ((ID = id3 AND CLASS = class3) " 
+ params["parameter"] 
+ " ) "

我的参数是这样的……

VALUE                            | DISPLAY TEXT   
---------------------------------|------------- 
OR (ID = id1 AND CLASS = class1) | 1 
OR (ID = id2 AND CLASS = class2) | 2

任何帮助将不胜感激!

【问题讨论】:

    标签: sql where-clause birt


    【解决方案1】:

    您应该避免在参数值中使用 SQL 关键字。这种方式会更好:

    WHERE 1 = 1
    AND ((ID = 3) OR (ID = ? AND CLASS = ?))
    

    然后将这两个查询参数链接到数据类型为“整数”且可能值为 1 或 2 的报告参数。与您当前的解决方案不同,这些查询参数可保护您的报告免受可能的 SQLIA 影响。

    如果您确实有充分的理由动态构建查询而不是使用查询参数,请尝试以下语句:

    WHERE 1 = 1
    AND ((ID = 3) OR (ID = -1 AND CLASS = -1))
    

    在数据集的 beforeOpen 脚本中:

    this.queryText=this.queryText.replaceAll('-1', params["parameter"].value);
    

    如果“参数”是一个整数,那么报告仍然受到 SQLIA 保护。

    【讨论】:

    • 对不起,我的例子不是一个好例子。我实际上对 ID 和 CLASS 有不同的值。我编辑了示例以反映这一点。不过感谢您的回答。如果它们都相同,它会起作用的。
    【解决方案2】:

    我发现出了什么问题。显然 BIRT 不喜欢多选列表。我通过测试一个简单的参数发现了这一点,但它仍然无法正常工作。最后我稍微更改了我的代码,将参数更改为单选按钮,并添加了第三个参数,它是前两个参数的组合。现在似乎工作正常。无论如何感谢 Dominique 的帮助!

    【讨论】:

      猜你喜欢
      • 2017-06-17
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多