JAVA异常记录(ORA-56900:pivot|unpivot 操作内不支持绑定变量)
JAVA中ORA-56900: pivot|unpivot 操作内不支持绑定变量
- ORA-56900: pivot|unpivot 操作内不支持绑定变量
- 使用场景及遇到问题
- 解决方法:在java中拼好sql再执行
- 实现效果
ORA-56900: pivot|unpivot 操作内不支持绑定变量
问题说明:oracle在使用行专列函数(pivot|unpivot),不允许pivot函数内动态绑定参数,即不支持:select * from table pivot(sum(column) for c1 in (?,?)) 这种写法。
使用场景及遇到问题
由于报表需求需要统计一年的数据:年份是由客户选的,会动态变
实际数据如上,会有指定的月份数据为空,由于觉得java去处理麻烦,就用oracle行转列行数补充日期为空的数据
理想状态:
实现方式
select * from (select count(*) sumNum,to_char(appl_time,'yyyy-MM') dateStr from OPM_CIM_ANALYSIS_RESULT t0where ADMITTANCEACCESS in ('Y','N') and appl_time is not nullgroup by to_char(appl_time,'yyyy-MM') order by to_char(appl_time,'yyyy-MM') desc) pivot (sum(sumNum) for dateStr in<foreach collection="dateList" item="item" open="(" close=")" separator=",">#{item}</foreach>)
遇到问题:ORA-56900: pivot|unpivot 操作内不支持绑定变量
2021-06-21 10:22:07 | DEBUG | http-nio-7779-exec-1 | com.dfwy.cim.dao.mamagement.ManagerSumResultDao.querySurveyInfo | ==> Preparing: select * from ( select count(*) sumNum,to_char(appl_time,'yyyy-MM') dateStr from OPM_CIM_ANALYSIS_RESULT t0 where ADMITTANCEACCESS in ('Y','N') and appl_time is not null group by to_char(appl_time,'yyyy-MM') order by to_char(appl_time,'yyyy-MM') desc ) pivot (sum(sumNum) for dateStr in ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? ) )
2021-06-21 10:22:07 | DEBUG | http-nio-7779-exec-1 | com.dfwy.cim.dao.mamagement.ManagerSumResultDao.querySurveyInfo | ==> Parameters: 2021-06(String), 2021-05(String), 2021-04(String), 2021-03(String), 2021-02(String), 2021-01(String), 2020-12(String), 2020-11(String), 2020-10(String), 2020-09(String), 2020-08(String), 2020-07(String)
2021-06-21 10:22:07 | ERROR | http-nio-7779-exec-1 | com.dfwy.frame.system.handler.GlobalExceptionHandler | 处理过程出现异常,Code:9000,message:
### Error querying database. Cause: java.sql.SQLException: ORA-56900: pivot|unpivot 操作内不支持绑定变量
解决方法:在java中拼好sql再执行
本人觉得这方法很挫,有没有大佬有好办法,留个解决思路吧。
下面给出实现的伪代码
public ResponseResult querySurveyMonitor(JSONObject jsonObject) {Map<String,Object> paramMap = new HashMap<>(4);paramMap.put("bankId",bankId);paramMap.put("dateList",dateList);//日均调查次数String exeSql = dynamicSql("sumNum",paramMap);Map<String,BigDecimal> sumNum = sumResultDao.querySurveyInfo(exeSql);
}/*** 组装动态的行专列sql* @Author pengdeyu* @Date 2021/6/21*/
private String dynamicSql(String name,Map<String,Object> paramMap){StringBuilder sb = new StringBuilder();sb.append("select * from (\n");sb.append("select count(*) "+name+",to_char(appl_time,'yyyy-MM') dateStr from OPM_CIM_ANALYSIS_RESULT t0\n");sb.append("where ADMITTANCEACCESS in ('Y','N') and appl_time is not null\n");String bankId = (String) paramMap.get("bankId");if(!Strings.isEmpty(bankId)){sb.append("and BANK_ID = #{bankId}\n");}sb.append("group by to_char(appl_time,'yyyy-MM') order by to_char(appl_time,'yyyy-MM') desc\n");sb.append(") pivot (sum(sumNum) for dateStr in\n");List<String> dateList = (List<String>) paramMap.get("dateList");sb.append("(");for(int i=0;i<dateList.size();i++){sb.append("'"+dateList.get(i)+"'");if(i != dateList.size()-1){sb.append(",");}}sb.append("))");return sb.toString();}//dao接口方法 只有一个String类型参数 mapper中用${_parameter}取值
Map<String,BigDecimal> querySurveyInfo(String exeSql);//执行的Mapper配置文件
<select id="querySurveyInfo" parameterType="java.lang.String" resultType="java.util.Map">${_parameter}</select>
实现效果
JAVA异常记录(ORA-56900:pivot|unpivot 操作内不支持绑定变量)相关推荐
- Fundebug后端Java异常监控插件更新至0.2.0,支持Spring及Maven
摘要: 0.2.0支持监控Spring应用,并且支持使用Maven接入插件,请大家及时更新. 支持监控Spring应用 1. pom.xml配置fundebug-spring依赖 <depend ...
- 异常记录: Handler dispatch failed; nested exception is java.lang.NoSuchMethodError
异常记录: Handler dispatch failed; nested exception is java.lang.NoSuchMethodError 参考文章: (1)异常记录: Handle ...
- java抛出自定义异常_10 个深恶痛绝的 Java 异常。。
异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定位异常问题. 什么是异常及异常的分类请看这篇文章:一张图搞清楚 Java ...
- 10 个深恶痛绝的 Java 异常。。
异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定位异常问题. 什么是异常及异常的分类请看这篇文章:一张图搞清楚 Java ...
- java异常对象引用变量_Java面向对象编程-异常处理
第九章 异常处理 异常情况会改变正常的流程,导致恶劣的后果,为了减少损失,应该事先充分预料所有可能出现的异常,然后采取以下措施: 首先考虑避免异常,彻底杜绝异常的发生:如果不能完全避免,则尽可能地减少 ...
- 10 个深恶痛绝的 Java 异常。。 1
2019独角兽企业重金招聘Python工程师标准>>> 异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定 ...
- java 异常_Java 进阶之异常处理
本文的主要内容分为 Java 异常的定义.Java 异常的处理.JVM 基础知识(异常表.JVM 指令分类和操作数栈)及深入剖析 try-catch-finally 四部分(图解形式).在深入剖析 t ...
- Java基础10:全面解读Java异常
更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...
- 最最最全面的Java异常面试及解答
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | ThinkWon 来源 | blog.csdn ...
最新文章
- 第十六节:语法总结(3)(C#6.0和C#7.0新语法)
- 概要设计实例_尽可能通用的运维CMDB的设计与实践
- 以个人身份加入.NET基金会
- 小猴子蓝裤黄袄的局域网聊天
- Flutter ListView 下拉刷新与上拉加载更多
- Unity调用Android类方法
- java多线程-线程停止
- PHP-dede学习:common.ini.php文件
- ArcGIS API 离线字体库加载及跨域问题解决
- 2021年安全生产模拟考试(全国特种作业操作证电工作业-电力电缆模拟考试题库二)安考星
- oracle asm文件查找,Oracle ASM 文件管理
- VS2005水晶报表教程
- matlab在图像两点连线,matlab画图,画出任意两点间的连线图,请高人帮忙呀,谢谢!谢谢!...
- 用python画人物素描_python实现图片素描效果
- 王家林 大数据Spark超经典视频链接全集[转]
- 【火电机组、风能、储能】高比例风电电力系统储能运行及配置分析(Matlab代码实现)
- 【夜读】2022年最后10天,致自己!
- 星巴克——starbuck
- Linux入职基础-3.6_ramdisk提升Apache性能实例(运维必懂)
- 近似误差 与 估计误差
热门文章
- java怎么写合并列sql_SQL STUFF函数 拼接字符串 多列 合并成一列 转
- 计算机专业职业生涯规划书,计算机信息专业职业生涯规划书
- java基本类型val_Java的基本数据类型
- Java利用JNA调用C#的dll
- 解决“windows已经阻止此软件因为无法验证发行者”方法
- 细数Mac上那些好用且免费的软件(二)
- 整合一些我认知的几种编程语言
- 黑苹果OC配置工具:OpenCore Configurator for Mac(2.48.0.0中文)
- 【兴趣】日语(2021年3月24~)
- 餐饮SaaS行进时:美团To B,二维火To C