BIRT multi select 参数和where语句

BIRT multi select parameter and where statement

我正在尝试向我的报告添加一个参数,该参数将创建这样一个 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 1 = 1
AND ((ID = 3) OR (ID = ? AND CLASS = ?))

然后 link 这两个查询参数到具有数据类型 "integer" 和可能值 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);

如果 "parameter" 是一个整数,那么报告仍然受到 SQLIA 的保护。

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