为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8.1
【操作系统】:win11
【CPU】:amd
【问题描述】*:从oracle迁移过来的语句:select tab.contract_id,tab.code,(case when contract_amount-skje>0 then contract_amount-skje else 0 end) AS qkje,d.name AS dname,c.name AS cname,s.name AS sname,tab.contract_amount,skje from ( select c.contract_id,c.code,c.CUSTOMER_ID,c.department_id,c.SALES_ID,c.contract_amount,nvl(sum(nvl((case when f.STATUS='B' then f.gather_amount else 0 end),0)),0) skje from ad_contract c,ad_finance_bill f where c.contract_id = f.contract_id(+) and c.status = 'B' and c.folder_id<>'12139786' group by c.contract_id,c.code,c.CUSTOMER_ID,c.department_id,c.SALES_ID,c.contract_amount,c.signed_date) tab,ad_refer_department d,ad_customer c,ad_sales s where tab.department_id = d.id and tab.customer_id = c.customer_id and tab.sales_id = s.sales_id order by tab.code,在管理工具查询没问题,别名都正确,但是在应用里用jdbc查出来字段名没有用到别名,全部是name,经排查,去掉case when then那个字段就没问题,加上就会导致别名无效,case when then放在最后也一样,驱动用的安装服务器带的那个,驱动是最新版本,java代码ResultSet rs = stmt.executeQuery(query);
ResultSetMetaData rsm = rs.getMetaData();
for (int i=1;i<rsm.getColumnCount()+1;i++) {
System.out.println(rsm.getColumnLabel(i)+"=="+rsm.getColumnName(i));
},换成DmJdbcDriver18-8.1.2.192.jar这个驱动就没问题
经排查,新老驱动getColumnName取值不一样,改用LabelName可避免此问题