当前使用版本
mybatis-plus:3.5.5
ojdbc:23.3.0.23.09
描述bug现象
oracle 批量修改的时候报错,数据库有clob字段
循环更新却没有问题
提供问题复现步骤
提供完整堆栈日志(可选) [pm-module-cost:10.12.51.38:9310] 2024-04-28 10:45:16.969 ERROR 15271 [1784413544452943872-0] [1036382] c.n.p.s.b.s.c.h.BaseExceptionHandler com.np.pm.module.mapper.CostBudgetCapitalRaisingMapper.updateById (batch index #2:关于使用问题) failed. 1 prior sub executor(s) completed successfully, but will be rolled back. Cause: java.sql.BatchUpdateException: ORA-01461: 只有在将值插入数据类型为 LONG 的列时,才可以绑定一个 LONG 值
https://docs.oracle.com/error-help/db/ora-01461/ ; uncategorized SQLException; SQL state [72000]; error code [1461]; ORA-01461: 只有在将值插入数据类型为 LONG 的列时,才可以绑定一个 LONG 值
https://docs.oracle.com/error-help/db/ora-01461/; nested exception is java.sql.BatchUpdateException: ORA-01461: 只有在将值插入数据类型为 LONG 的列时,才可以绑定一个 LONG 值
https://docs.oracle.com/error-help/db/ora-01461/
org.springframework.jdbc.UncategorizedSQLException: com.np.pm.module.mapper.CostBudgetCapitalRaisingMapper.updateById (batch index #2:关于使用问题) failed. 1 prior sub executor(s) completed successfully, but will be rolled back. Cause: java.sql.BatchUpdateException: ORA-01461: 只有在将值插入数据类型为 LONG 的列时,才可以绑定一个 LONG 值
https://docs.oracle.com/error-help/db/ora-01461/ ; uncategorized SQLException; SQL state [72000]; error code [1461]; ORA-01461: 只有在将值插入数据类型为 LONG 的列时,才可以绑定一个 LONG 值
https://docs.oracle.com/error-help/db/ora-01461/; nested exception is java.sql.BatchUpdateException: ORA-01461: 只有在将值插入数据类型为 LONG 的列时,才可以绑定一个 LONG 值
https://docs.oracle.com/error-help/db/ora-01461/ at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:93) at com.baomidou.mybatisplus.extension.toolkit.SqlHelper.executeBatch(SqlHelper.java:202) at com.baomidou.mybatisplus.extension.toolkit.SqlHelper.executeBatch(SqlHelper.java:233) at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.executeBatch(ServiceImpl.java:283) at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.updateBatchById(ServiceImpl.java:233) at com.baomidou.mybatisplus.extension.service.IService.updateBatchById(IService.java:265) at com.baomidou.mybatisplus.extension.service.IService FastClassBySpringCGLIB f8525d18.invoke() at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxyCglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)atorg.springframework.aop.framework.CglibAopProxy CglibMethodInvocation.proceed(CglibAopProxy.java:763) at org.springframework.transaction.interceptor.TransactionInterceptor1.proceedWithInvocation(TransactionInterceptor.java:123)atorg.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)atorg.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)atorg.springframework.aop.framework.CglibAopProxy CglibMethodInvocation.proceed(CglibAopProxy.java:763) at org.springframework.aop.framework.CglibAopProxyDynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)atcom.np.pm.module.service.impl.CostBudgetCapitalRaisingServiceImpl EnhancerBySpringCGLIB 4919bdd1.updateBatchById()atcom.np.pm.module.manager.CostBudgetCapitalRaisingV2Manager.approveVersion(CostBudgetCapitalRaisingV2Manager.java:1015)atcom.np.pm.module.manager.CostBudgetCapitalRaisingV2Manager FastClassBySpringCGLIB 5d1fd32d.invoke()atorg.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)atorg.springframework.aop.framework.CglibAopProxy CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.framework.CglibAopProxyCglibMethodInvocation.proceed(CglibAopProxy.java:763)atorg.springframework.transaction.interceptor.TransactionInterceptor 1.proceedWithInvocation(TransactionInterceptor.java:123) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxyCglibMethodInvocation.proceed(CglibAopProxy.java:763)atorg.springframework.aop.framework.CglibAopProxy DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) at com.np.pm.module.manager.CostBudgetCapitalRaisingV2Manager EnhancerBySpringCGLIB ed04ae21.approveVersion() at com.np.pm.module.controller.v2.CostBudgetCapitalRaisingVersionV2Controller.approve(CostBudgetCapitalRaisingVersionV2Controller.java:104) at com.np.pm.module.controller.v2.CostBudgetCapitalRaisingVersionV2Controller FastClassBySpringCGLIB 1916bbad.invoke() at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxyCglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)atorg.springframework.aop.framework.CglibAopProxy CglibMethodInvocation.proceed(CglibAopProxy.java:763) at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxyCglibMethodInvocation.proceed(CglibAopProxy.java:763)atorg.springframework.aop.framework.CglibAopProxy DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) at com.np.pm.module.controller.v2.CostBudgetCapitalRaisingVersionV2Controller EnhancerBySpringCGLIB b5db178b.approve() at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) at javax.servlet.http.HttpServlet.service(HttpServlet.java:517) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:584) at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) at io.undertow.servlet.handlers.FilterHandlerFilterChainImpl.doFilter(FilterHandler.java:129)atcom.np.pm.user.spring.boot.starter.filter.UserInfoFilter.doFilterInternal(UserInfoFilter.java:33)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)atio.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)atio.undertow.servlet.handlers.FilterHandler FilterChainImpl.doFilter(FilterHandler.java:131) at com.np.pm.tenant.spring.boot.starter.filter.TenantFilter.doFilterInternal(TenantFilter.java:40) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) at io.undertow.servlet.handlers.FilterHandlerFilterChainImpl.doFilter(FilterHandler.java:131)atorg.springframework.security.web.FilterChainProxy VirtualFilterChain.doFilter(FilterChainProxy.java:337) at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:96) at org.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)atorg.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122)atorg.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116)atorg.springframework.security.web.FilterChainProxy VirtualFilterChain.doFilter(FilterChainProxy.java:346) at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) at org.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)atorg.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109)atorg.springframework.security.web.FilterChainProxy VirtualFilterChain.doFilter(FilterChainProxy.java:346) at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) at org.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)atorg.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)atorg.springframework.security.web.FilterChainProxy VirtualFilterChain.doFilter(FilterChainProxy.java:346) at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:164) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)atorg.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)atorg.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)atorg.springframework.security.web.FilterChainProxy VirtualFilterChain.doFilter(FilterChainProxy.java:346) at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)atorg.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112)atorg.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82)atorg.springframework.security.web.FilterChainProxy VirtualFilterChain.doFilter(FilterChainProxy.java:346) at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)atorg.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)atorg.springframework.security.web.FilterChainProxy VirtualFilterChain.doFilter(FilterChainProxy.java:346) at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) at io.undertow.servlet.handlers.FilterHandlerFilterChainImpl.doFilter(FilterHandler.java:131)atorg.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)atio.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)atio.undertow.servlet.handlers.FilterHandler FilterChainImpl.doFilter(FilterHandler.java:131) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) at io.undertow.servlet.handlers.FilterHandlerFilterChainImpl.doFilter(FilterHandler.java:131)atorg.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)atio.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)atio.undertow.servlet.handlers.FilterHandler FilterChainImpl.doFilter(FilterHandler.java:131) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) at io.undertow.servlet.handlers.FilterHandlerFilterChainImpl.doFilter(FilterHandler.java:131)atcom.np.pm.trace.spring.boot.starter.filter.WebTraceFilter.doFilterInternal(WebTraceFilter.java:50)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)atio.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)atio.undertow.servlet.handlers.FilterHandler FilterChainImpl.doFilter(FilterHandler.java:131) at com.np.pm.spring.boot.starter.core.filter.UndertowExceptionFilter.doFilterInternal(UndertowExceptionFilter.java:42) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) at io.undertow.servlet.handlers.FilterHandlerFilterChainImpl.doFilter(FilterHandler.java:131)atio.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)atio.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)atio.undertow.servlet.handlers.ServletChain 1.handleRequest(ServletChain.java:68) at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117) at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:275) at io.undertow.servlet.handlers.ServletInitialHandler.access100(ServletInitialHandler.java:79)atio.undertow.servlet.handlers.ServletInitialHandler 2.call(ServletInitialHandler.java:134) at io.undertow.servlet.handlers.ServletInitialHandler2.call(ServletInitialHandler.java:131)atio.undertow.servlet.core.ServletRequestContextThreadSetupAction 1.call(ServletRequestContextThreadSetupAction.java:48) at io.undertow.servlet.core.ContextClassLoaderSetupAction1.call(ContextClassLoaderSetupAction.java:43)atio.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:255)atio.undertow.servlet.handlers.ServletInitialHandler.access 000(ServletInitialHandler.java:79) at io.undertow.servlet.handlers.ServletInitialHandler1.handleRequest(ServletInitialHandler.java:100)atio.undertow.server.Connectors.executeRootHandler(Connectors.java:393)atio.undertow.server.HttpServerExchange 1.run(HttpServerExchange.java:852) at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019) at org.jboss.threads.EnhancedQueueExecutorThreadBody.doRunTask(EnhancedQueueExecutor.java:1558)atorg.jboss.threads.EnhancedQueueExecutor ThreadBody.run(EnhancedQueueExecutor.java:1423) at org.xnio.XnioWorkerWorkerThreadFactory 1$1.run(XnioWorker.java:1282) at java.lang.Thread.run(Thread.java:748) Caused by: java.sql.BatchUpdateException: ORA-01461: 只有在将值插入数据类型为 LONG 的列时,才可以绑定一个 LONG 值
https://docs.oracle.com/error-help/db/ora-01461/ at oracle.jdbc.driver.OraclePreparedStatement.generateBatchUpdateException(OraclePreparedStatement.java:10211) at oracle.jdbc.driver.OraclePreparedStatement.executeBatchFromQueue(OraclePreparedStatement.java:9948) at oracle.jdbc.driver.OraclePreparedStatement.executeLargeBatch(OraclePreparedStatement.java:9729) at oracle.jdbc.driver.OracleStatement.executeBatch(OracleStatement.java:5115) at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:285) at com.zaxxer.hikari.pool.ProxyStatement.executeBatch(ProxyStatement.java:127) at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeBatch(HikariProxyPreparedStatement.java) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:78) at com.sun.proxy.Proxy295.executeBatch(UnknownSource)atorg.apache.ibatis.executor.BatchExecutor.doFlushStatements(BatchExecutor.java:126)atorg.apache.ibatis.executor.BaseExecutor.flushStatements(BaseExecutor.java:129)atorg.apache.ibatis.executor.BaseExecutor.flushStatements(BaseExecutor.java:122)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)atjava.lang.reflect.Method.invoke(Method.java:498)atorg.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)atcom.sun.proxy. Proxy293.flushStatements(Unknown Source) at org.apache.ibatis.session.defaults.DefaultSqlSession.flushStatements(DefaultSqlSession.java:252) at com.baomidou.mybatisplus.extension.toolkit.SqlHelper.lambdaexecuteBatch 1(SqlHelper.java:240) at com.baomidou.mybatisplus.extension.toolkit.SqlHelper.executeBatch(SqlHelper.java:192) ... 164 common frames omitted 提供问题复现工程(可选) 请尽量提供复现工程,减少大家排错的时间.
Comment From: nieqiurong
整理一个复现小工程过来看看。
Comment From: edynasty
Comment From: edynasty
saveBatch同样有这个问题
Comment From: nieqiurong
没得那么高版本的数据库,看网上错误那错误是说可能字段过长的原因,你切换到3.5.6先看看吧
Comment From: edynasty
3.5.6我也试过也是一样的错误,应该不是字段过长的原因,因为循环updateById是可以成功更新的
Comment From: nieqiurong
只能在驱动层面调试一下错误原因了.
Comment From: edynasty
我下降了oracle驱动版本解决了问题