从HP-UNIX把DB2数据库V10.1.0.3迁移到AIX 7.1,使用MYBATIS执行如下查询,在HP-UNIX和AIX 7.1上都能查到数据并且结果准确。
然后在AXI 7.1上把DB2数据库从V10.1.0.3升级到V10.1.0.5,使用MYBATIS执行该SQL就查询不到数据,该SQL通过jdbc、控制台、DbVisualizer工具查询均能得到数据并且结果正确。
该SQL为:
select * from ( select rownumber() over(ORDER BY M.ZQZUDM, B.JZLVDM, B.MNFXRQ) as rownumber_, B.ID ID, B.SECURITY_MAIN_ID SECURITY_MAIN_ID, M.ZQZUDM ZQDM, M.ZQMC ZQMC, B.ZQJC ZQJC, B.MZBZ BIZG, B.CSME CSME, B.FXXS FXXS, B.JFFXZJE JFFXZJE, B.XJFXZJE XJFXZJE, B.FXJ FXJ, B.CHQX_MONTH CHQX_MONTH, TRIM(B.FDLVBZ) FDLVBZ, B.JZLVDM JZLVDM, B.LC_PCENT LC_PCENT, B.JYBS_JJQJ JYBS_JJQJ, B.FXZL FXZL, B.FXJEGFFS FXJEGFFS, B.PMLV PMLV, B.QXRQ_DATE QXRQ_DATE, B.ZPRQ_DATE ZPRQ_DATE, B.DFRQ_DATE DFRQ_DATE, B.FXZQ_MONTH FXZQ_MONTH, B.JXFS JXFS, B.MNFXRQ MNFXRQ, B.ZQNQQQ ZQNQQQ, B.SFKZHZ SFKZHZ, B.SHRQ, B.HSRQ, B.SFXYGX, B.BZ_MEMO BZ_MEMO, B.LLBDRQ LLBDRQ, B.JBRY_CODE JBRY_CODE, B.JBRQ_DATE JBRQ_DATE, B.SHRY_CODE SHRY_CODE, B.SHRQ_DATE SHRQ_DATE, B.ZSR, B.FXJZLVLX, B.SFKFLKZZ, B.JXLX, B.CARC_TYPE, B.SFDXZWRZ, B.BJHZQDL, B.SYME, B.TIMESTAMP_U TIMESTAMP_U FROM SECURITY_BOND B, SECURITY_MAIN M WHERE B.TIMESTAMP_D IS NULL AND M.TIMESTAMP_D IS NULL AND B.SECURITY_MAIN_ID = M.ID and B.SECURITY_MAIN_ID like '%'||#{SECURITY_MAIN_ID}||'%' ORDER BY M.ZQZUDM, B.JZLVDM, B.MNFXRQ ) as temp_ where rownumber_ <= 25 FOR READ ONLY WITH UR
经检查,发现查不到数据是由于B.SECURITY_MAIN_ID like '%'||#{SECURITY_MAIN_ID}||'%'谓词引起。
上面的'%'||#{SECURITY_MAIN_ID}||'%'实际内容为:B.SECURITY_MAIN_ID like '%201111131132312%'
如果在MYBATIS的配置文件中将 '%'||#{SECURITY_MAIN_ID}||'%' 改成 '%'||${SECURITY_MAIN_ID}||'%' 方式可以解决此问题。
请问,如何解决该问题。
收起