当它是一个允许多个值的列表时,如何检查我的参数在脚本中是否为空?

How can I check if my parameter is null in the script when it's a list that allow multiple values?

我在级联参数中创建了非必需参数:

month-opt 参数不是必需的,并且允许多个值。

我在查询中使用了这个参数,所以我创建了一个脚本:

if(params["MONTH-OPT"].value != null && params["MONTH-OPT"].value != ""){
    this.queryText = this.queryText + " AND MONTH IN (" + params["MONTH-OPT"].value.join("," ) +") ";
}

我的问题是:如果用户 select 一个空值:

然后,我遇到了一个问题:

Cannot get the result set metadata.
    org.eclipse.birt.report.data.oda.jdbc.JDBCException: SQL statement does not return a ResultSet object.
SQL error #1:Incorrect syntax near ')'.
 ;
    java.sql.SQLException: Incorrect syntax near ')'. (Element ID:18061) 

似乎关于null的测试不正确,因为它绕过了检查。如果我不允许多个值,它正在工作...

当您使用 IN 运算符时,要求始终在括号中包含一些值。

 INVALID SYNTAX 
 select * from table where id in ()


 Valid Syntax 
   select * from table where id in (null)
   or 
   select * from table where id in ('') 

等 更改您的代码以传递空值以解决问题。

您可以在脚本中使用简单的 if 条件

if  params["MONTH-OPT"].value =  Null
   select * from table
else 
  select * from table where id in (1, 2)  etc 

基于:https://fr.scribd.com/document/15350321/BIRT-Multi-Value-Cascading-Parameters

修复可以(我认为这不是最好的...):

if(params["MONTH-OPT"].value != null ){
    var monthOptionNullValue = params["MONTH-OPT"].toString();
    if( monthOptionNullValue != null && monthOptionNullValue != ""){
        this.queryText = this.queryText + " AND MONTH IN (" + params["MONTH-OPT"].value.join("," ) +") ";
    }
}

感谢 srp 的帮助