我试图在我的报告中添加一个参数,该参数将创建一个像这样的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
任何帮助将不胜感激!
答案 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不喜欢多选列表。我通过测试一个简单的参数找到了它,它仍然无法正常工作。我最后改变了我的代码,将参数更改为单选按钮,并添加了第三个参数,它是前两个参数的组合。现在似乎工作正常。非常感谢多米尼克的帮助!