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
相关产品推荐
相关产品推荐

