BIRT多选参数和where语句

时间:2015-03-04 23:36:05

标签: sql where-clause birt

我试图在我的报告中添加一个参数,该参数将创建一个像这样的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

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

您应该避免在参数值中使用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);

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

答案 1 :(得分:0)

我发现了什么问题。显然BIRT不喜欢多选列表。我通过测试一个简单的参数找到了它,它仍然无法正常工作。我最后改变了我的代码,将参数更改为单选按钮,并添加了第三个参数,它是前两个参数的组合。现在似乎工作正常。非常感谢多米尼克的帮助!