SQL Developer使用WITH语句查询后无法导出xlsx、csv文件问题咨询
问题产生原因
- SQL Developer版本兼容问题:20.x及以下版本的导出功能对包含大量UNION拼接的WITH子句(CTE)查询兼容度较低,导出时无法正确解析WITH部分的查询上下文,重新执行查询返回空结果集,最终生成0KB文件。
- 导出逻辑与手动执行逻辑不一致:你通过F9(运行语句)得到的查询结果是当前会话的缓存数据,而导出功能默认会独立发起一次新的查询请求,当WITH子句中拼接的ID数量过大时,新查询可能出现执行超时、语句被截断等问题,导致无数据返回。
- 配置冲突:如果导出时开启了「仅导出选中行」但未全选结果集,或是导出编码与查询结果编码不兼容,也会触发空文件问题,该类情况出现概率较低。
可行解决方法
以下方法均不需要创建表权限,可直接使用:
- 方法1:修改查询写法绕开WITH兼容问题
利用Oracle支持多列IN参数不受1000条限制的特性,改写查询,和你当前的查询逻辑完全等价,导出兼容性大幅提升,改写示例如下:
select * from 你的业务表名 where (1, supplypointid) in ( (1,4684), (1,112477), ... (1,6547) ) and propertykey='MPCORE' and dateend is null
- 方法2:绕开自带导出功能
按F9运行查询得到完整结果后,在结果集面板右键选择【复制】-【复制所有行】,直接粘贴到空白Excel或CSV文件中即可,完全避开导出逻辑的兼容问题。 - 方法3:调整导出配置
运行查询得到结果后,在结果集面板右键选择【导出】,在导出向导的高级选项中,取消勾选「导出时重新运行查询」选项,直接使用当前已加载到内存中的结果集导出,即可避免空文件问题。 - 方法4:升级SQL Developer版本
如果当前使用的是20.x及以下版本,升级到21.x及以上的正式版本,该版本已修复WITH子句查询的导出兼容Bug。
内容的提问来源于stack exchange,提问作者user17107276
相关产品推荐
相关产品推荐

