You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 ESB中介脚本动态变量If条件失效及查询为空问题求助

问题解决步骤

1. 修复未初始化变量问题

代码里str和union变量没有初始值,直接拼接会导致undefined混入字符串,若没有满足条件的表,str会保持undefined,最终触发"Query was empty"错误。

初始化这两个变量:

var str = "";
var union = "UNION "; // 如需UNION ALL,可改为"UNION ALL "

2. 修正条件判断逻辑

你的动态变量annee2是date2的前四位(示例中为2022),原条件parseInt(table[i].TABLE_NAME.substr(0, 4)) < parseInt(annee2)会排除所有年份等于annee2的表,和静态值<2023时选中2022表的逻辑不一致。将条件改为<=即可对齐逻辑:

if(parseInt(table[i].TABLE_NAME.substr(0, 4)) <= parseInt(annee2) && parseInt(table[i].TABLE_NAME.substr(0, 4)) >= parseInt(annee1))

3. 处理多余的UNION关键字

循环中每次拼接都会添加union,最终SQL末尾会多出无用的UNION,需在循环结束后去除:

// 循环结束后清理多余UNION
if(str.length > 0) {
    str = str.slice(0, -union.length);
}

完整修正代码

<script language="js"><![CDATA[var table = [
{"TABLE_NAME":"20220917"},
{"TABLE_NAME":"20221018"},
{"TABLE_NAME":"20221211"},
{"TABLE_NAME":"20230417"}
]; 
var date2 ="20221211";
var date1 ="20191018";
var annee1=date1.substr(0, 4);
var annee2=date2.substr(0, 4);
var str = "";
var union = "UNION ";
for (var i=0; i<table.length;i++){
    var tableYear = parseInt(table[i].TABLE_NAME.substr(0, 4));
    var year1 = parseInt(annee1);
    var year2 = parseInt(annee2);
    if(tableYear <= year2 && tableYear >= year1){
        str = str +" select * from "+"`"+table[i].TABLE_NAME+"`"+" " +union + "";
    }
}
// 移除末尾多余的UNION
if(str) {
    str = str.substring(0, str.lastIndexOf(union));
}]]></script>

额外优化建议

  • 把年份解析操作放在循环内仅执行一次,避免重复调用parseInt和substr,提升运行效率。
  • 可添加日志输出(如打印tableYear、year1、year2的值),方便调试条件匹配情况。

内容的提问来源于stack exchange,提问作者rania ben salem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:55:24