具体报错如下

在人大金仓数据库中报      com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'',') WITHIN GROUP (ORDER BY mix_info) AS m', expect BY, actual (, pos 669, line 1, column 669, token ( 
	at com.alibaba.druid.sql.parser.SQLParser.printError(SQLParser.java:881) ~[druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.sql.parser.SQLParser.accept(SQLParser.java:887) ~[druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.sql.parser.SQLSelectParser.parseGroupBy(SQLSelectParser.java:892) ~[druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.sql.parser.SQLSelectParser.query(SQLSelectParser.java:508) ~[druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.sql.parser.SQLSelectParser.select(SQLSelectParser.java:78) ~[druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.sql.parser.SQLSelectParser.parseTableSourceRest(SQLSelectParser.java:1799) ~[druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.sql.parser.SQLSelectParser.parseTableSourceRest(SQLSelectParser.java:2077) ~[druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.sql.parser.SQLSelectParser.parseTableSourceRest(SQLSelectParser.java:2077) ~[druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.sql.parser.SQLSelectParser.parseTableSourceRest(SQLSelectParser.java:1633) ~[druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.sql.parser.SQLSelectParser.parseTableSource(SQLSelectParser.java:1333) ~[druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.sql.parser.SQLSelectParser.parseFrom(SQLSelectParser.java:1195) ~[druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.sql.parser.SQLSelectParser.query(SQLSelectParser.java:504) ~[druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.sql.parser.SQLSelectParser.select(SQLSelectParser.java:78) ~[druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.sql.parser.SQLStatementParser.parseSelect(SQLStatementParser.java:4872) ~[druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:233) ~[druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:108) ~[druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.sql.SQLUtils.format(SQLUtils.java:384) [druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.sql.SQLUtils.format(SQLUtils.java:377) [druid-1.2.27.jar!/:na] 
	at org.springblade.core.mp.plugins.SqlLogInterceptor.statement_close(SqlLogInterceptor.java:128) [blade-starter-mybatis-3.2.0.nc.RELEASE.jar!/:na] 
	at com.alibaba.druid.filter.FilterChainImpl.statement_close(FilterChainImpl.java:2903) [druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.close(StatementProxyImpl.java:130) [druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.pool.DruidPooledStatement.close(DruidPooledStatement.java:507) [druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.pool.DruidPooledPreparedStatement.closeInternal(DruidPooledPreparedStatement.java:195) [druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.pool.DruidPooledConnection.closePoolableStatement(DruidPooledConnection.java:192) [druid-1.2.27.jar!/:na] 
	at com.alibaba.druid.pool.DruidPooledPreparedStatement.close(DruidPooledPreparedStatement.java:187) [druid-1.2.27.jar!/:na] 
	at org.apache.ibatis.executor.BaseExecutor.closeStatement(BaseExecutor.java:286) [mybatis-3.5.13.jar!/:3.5.13] 
	at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:67) [mybatis-3.5.13.jar!/:3.5.13] 
	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:333) [mybatis-3.5.13.jar!/:3.5.13] 
	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) [mybatis-3.5.13.jar!/:3.5.13] 
	at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81) [mybatis-plus-extension-3.5.3.2.jar!/:3.5.3.2] 
	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) [mybatis-3.5.13.jar!/:3.5.13] 
	at com.sun.proxy.$Proxy648.query(Unknown Source) [na:na] 
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) [mybatis-3.5.13.jar!/:3.5.13] 
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) [mybatis-3.5.13.jar!/:3.5.13] 
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) [mybatis-3.5.13.jar!/:3.5.13] 
	at sun.reflect.GeneratedMethodAccessor66.invoke(Unknown Source) ~[na:na] 
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_212] 
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_212] 
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) [mybatis-spring-2.1.1.jar!/:2.1.1] 
	at com.sun.proxy.$Proxy165.selectList(Unknown Source) [na:na] 
	at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224) [mybatis-spring-2.1.1.jar!/:2.1.1] 
	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:166) [mybatis-plus-core-3.5.3.2.jar!/:3.5.3.2] 
	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:77) [mybatis-plus-core-3.5.3.2.jar!/:3.5.3.2] 
	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) [mybatis-plus-core-3.5.3.2.jar!/:3.5.3.2] 
	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) [mybatis-plus-core-3.5.3.2.jar!/:3.5.3.2] 
	at com.sun.proxy.$Proxy214.getResourceRoomList(Unknown Source) [na:na] 
	at com.newcapec.dormStay.service.impl.StudentbedServiceImpl.getResourceRoomList(StudentbedServiceImpl.java:2607) [newcapec-dorm-stay-3.2.0.nc-SNAPSHOT.jar!/:na] 
	at com.newcapec.dormStay.service.impl.StudentbedServiceImpl$$FastClassBySpringCGLIB$$cf2c7418.invoke(<generated>) [newcapec-dorm-stay-3.2.0.nc-SNAPSHOT.jar!/:na] 
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) [spring-core-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) [spring-aop-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) [spring-aop-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) [spring-aop-5.3.29.jar!/:5.3.29] 
	at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123) [spring-context-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) [spring-aop-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) [spring-aop-5.3.29.jar!/:5.3.29] 
	at com.newcapec.dormStay.service.impl.StudentbedServiceImpl$$EnhancerBySpringCGLIB$$f9f44346.getResourceRoomList(<generated>) [newcapec-dorm-stay-3.2.0.nc-SNAPSHOT.jar!/:na] 
	at com.newcapec.dormStay.controller.ResourceController.queryFloorDetail(ResourceController.java:199) [newcapec-dorm-stay-3.2.0.nc-SNAPSHOT.jar!/:na] 
	at com.newcapec.dormStay.controller.ResourceController$$FastClassBySpringCGLIB$$e74cfabe.invoke(<generated>) [newcapec-dorm-stay-3.2.0.nc-SNAPSHOT.jar!/:na] 
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) [spring-core-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) [spring-aop-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) [spring-aop-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) [spring-aop-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) [spring-aop-5.3.29.jar!/:5.3.29] 
	at org.springblade.core.log.aspect.RequestLogAspect.aroundApi(RequestLogAspect.java:120) [blade-starter-log-3.2.0.nc.RELEASE.jar!/:na] 
	at sun.reflect.GeneratedMethodAccessor203.invoke(Unknown Source) ~[na:na] 
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_212] 
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_212] 
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634) [spring-aop-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624) [spring-aop-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72) [spring-aop-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) [spring-aop-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) [spring-aop-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) [spring-aop-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) [spring-aop-5.3.29.jar!/:5.3.29] 
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) [spring-aop-5.3.29.jar!/:5.3.29] 
	at com.newcapec.dormStay.controller.ResourceController$$EnhancerBySpringCGLIB$$ede949ab.queryFloorDetail(<generated>) [newcapec-dorm-stay-3.2.0.nc-SNAPSHOT.jar!/:na] 
	at sun.reflect.GeneratedMethodAccessor1418.invoke(Unknown Source) ~[na:na] 
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_212] 
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_212] 
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) [spring-web-5.3.29.jar!/:5.3.29] 
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) [spring-web-5.3.29.jar!/:5.3.29] 
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) [spring-webmvc-5.3.29.jar!/:5.3.29] 
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) [spring-webmvc-5.3.29.jar!/:5.3.29] 
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) [spring-webmvc-5.3.29.jar!/:5.3.29] 
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) [spring-webmvc-5.3.29.jar!/:5.3.29] 
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) [spring-webmvc-5.3.29.jar!/:5.3.29] 
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) [spring-webmvc-5.3.29.jar!/:5.3.29] 
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.3.29.jar!/:5.3.29] 
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) [spring-webmvc-5.3.29.jar!/:5.3.29] 
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:497) [jakarta.servlet-api-4.0.4.jar!/:4.0.4] 
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.3.29.jar!/:5.3.29] 
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:584) [jakarta.servlet-api-4.0.4.jar!/:4.0.4] 
	at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at org.springblade.core.log.filter.LogTraceFilter.doFilter(LogTraceFilter.java:39) [blade-starter-log-3.2.0.nc.RELEASE.jar!/:na] 
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at org.springblade.core.boot.request.BladeRequestFilter.doFilter(BladeRequestFilter.java:62) [blade-core-boot-3.2.0.nc.RELEASE.jar!/:na] 
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:114) [druid-1.2.27.jar!/:na] 
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.3.29.jar!/:5.3.29] 
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) [spring-web-5.3.29.jar!/:5.3.29] 
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.3.29.jar!/:5.3.29] 
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) [spring-web-5.3.29.jar!/:5.3.29] 
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) [spring-boot-actuator-2.7.15.jar!/:2.7.15] 
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) [spring-web-5.3.29.jar!/:5.3.29] 
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.3.29.jar!/:5.3.29] 
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) [spring-web-5.3.29.jar!/:5.3.29] 
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) [undertow-core-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) [undertow-core-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) [undertow-core-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:275) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:79) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:134) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:131) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:255) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:79) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:100) [undertow-servlet-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:393) [undertow-core-2.2.26.Final.jar!/:2.2.26.Final] 
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:852) [undertow-core-2.2.26.Final.jar!/:2.2.26.Final] 
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) [jboss-threads-3.1.0.Final.jar!/:3.1.0.Final] 
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019) [jboss-threads-3.1.0.Final.jar!/:3.1.0.Final] 
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558) [jboss-threads-3.1.0.Final.jar!/:3.1.0.Final] 
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1449) [jboss-threads-3.1.0.Final.jar!/:3.1.0.Final] 
	at org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282) [xnio-api-3.8.7.Final.jar!/:3.8.7.Final] 
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_212] 
 

问题分析

这个报

对应 SQL 中使用了 Oracle 语法:

listagg(to_char(mix_info),',') within group (order by mix_info) as mix_info

人大金仓 Oracle 兼容模式可以正常执行这条 SQL,但 BladeX 的 SqlLogInterceptor 在 statement_close 时调用 Druid 的 SQLUtils.format() 做日志格式化。Druid 1.2.27 对当前 dbType 无法正确解析 LISTAGG ... WITHIN GROUP,抛出 ParserException,由于方法上有 @SneakyThrows,异常向上传播,导致接口报错。

错不是 SQL 在人大金仓里执行失败,而是 SQL 日志打印阶段 抛出的异常。

修复方案

已在 bladex-tool 的 SqlLogInterceptor 中修复:

  1. 人大金仓/达梦/崖山数据库 统一按 DbType.oracle 格式化
  2. 格式化失败时降级 为原始 SQL 输出,不再影响业务接口
	/**
	 * 格式化 SQL;人大金仓等 Oracle 兼容库及 Druid 无法解析的语法降级为原始 SQL,避免影响业务。
	 */
	private static String formatSqlSafely(String sql, String dbType, List<Object> parameters) {
		try {
			return SQLUtils.format(sql, resolveDbType(dbType), parameters, FORMAT_OPTION);
		} catch (Exception ex) {
			log.debug("SQL format failed, fallback to raw sql. dbType={}, reason={}", dbType, ex.getMessage());
			return sql;
		}
	}

	/**
	 * Oracle 兼容模式数据库(人大金仓、达梦等)统一按 Oracle 方言格式化。
	 */
	private static DbType resolveDbType(String dbType) {
		// ...
	}

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐