-
nested exception is java.sql.BatchUpdateException: 批处理中出现错误: ORA-00972: 标识符过长5
最近开发项目,跑批处理遇到一个问题:
2013-07-28 09:53:35,715[P17Quartz_CAScheduler_Worker-7]ERROR [JobRunShell]run(line:211)Job DEFAULT.propertySmsJobDetail threw an unhandled Exception:
org.springframework.jdbc.UncategorizedSQLException: StatementCallback; uncategorized SQLException for SQL [update T_CC_L2_SMS_Send set LastUpt_Dttm=to_date('2013-07-28 09:53:35','yyyy-mm-dd hh24:mi:ss'), ENABLE_FLG = '2' where ACT_ID =350791104]; SQL state [null]; error code [17081]; 批处理中出现错误: ORA-00972: 标识符过长
; nested exception is java.sql.BatchUpdateException: 批处理中出现错误: ORA-00972: 标识符过长
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.translate(SQLStateSQLExceptionTranslator.java:124)
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:322)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:407)
at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:559)
at com.cpic.p17.common.dao.impl.SmsSendDAOImpl.bachUpdate(SmsSendDAOImpl.java:228)
at com.cpic.p17.common.service.impl.SmsSendServiceImpl.bachUpdate(SmsSendServiceImpl.java:346)
at sun.reflect.GeneratedMethodAccessor845.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy408.bachUpdate(Unknown Source)
at com.cpic.p17.property.service.impl.SurveyMessageImpl.messageHandle(SurveyMessageImpl.java:535)
at com.cpic.p17.property.service.impl.SurveyMessageImpl.surveyMessageHandle(SurveyMessageImpl.java:125)
at com.cpic.p17.property.quartz.SurveyMessageSchedulJob.executeInternal(SurveyMessageSchedulJob.java:47)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)
Caused by: java.sql.BatchUpdateException: 批处理中出现错误: ORA-00972: 标识符过长
at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:415)
at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:455)
at oracle.jdbc.driver.OracleStatement.executeBatch(OracleStatement.java:3961)
at weblogic.jdbc.wrapper.Statement_oracle_jdbc_driver_T4CStatement.executeBatch(Unknown Source)
at org.springframework.jdbc.core.JdbcTemplate$1BatchUpdateStatementCallback.doInStatement(JdbcTemplate.java:540)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:396)
... 21 more
==============================================
报错是因为SQL语句:
update T_CC_L2_SMS_Send set LastUpt_Dttm=to_date('2013-07-28 09:53:35','yyyy-mm-dd hh24:mi:ss'), ENABLE_FLG = '2' where ACT_ID =350791104
但是该语句在PL-SQL 单独运行时正常的。 而且该quartz的从去年9月份到现在都没有改动过。 昨天忽然出错。
我初步分析可能原因如下:
1 因为报错的方法如下, 怀疑入参的数据组的长度,超出的batchUpdate的,比如达到 1000条。
/**
* SQL批处理
*/
public void bachUpdate(String[] sql){
this.getJdbcTemplate().batchUpdate(sql);
}
2 怀疑SQL:update T_CC_L2_SMS_Send set LastUpt_Dttm=to_date('2013-07-28 09:53:35','yyyy-mm-dd hh24:mi:ss'), ENABLE_FLG = '2' where ACT_ID =350791104
其中【ACT_ID =350791104】 应该写成【ACT_ID ='350791104'】,但是该字段act_id 的类型为number(10) ,按理应该可以执行的。
3 怀疑因为是批量处理,前面一批SQL 是insert语句,刚巧这个update语句是紧排在insert后面。 意思是出错的是上一个SQL,日志截获的是下一个SQL。
形如:
insert …………;
insert …………;
insert …………;(此句报错)
update T_CC_L2_SMS_Send set LastUpt_Dttm=to_date('2013-07-28 09:53:35','yyyy-mm-dd hh24:mi:ss'), ENABLE_FLG = '2' where ACT_ID =350791104 (拦截此句)
网上关于标识符过长的解释 都无法说明原因;
往各位帮忙解答!
2013年7月29日 08:57
1个答案 按时间排序 按投票排序
-
把sql都保存下来,启用回滚单独用junit测试下,1.一条一条测试,2.insert和update分开测试,3.使用spring提供的批处理insert,update分开测试,http://hi.baidu.com/xulong7814/item/65ac6a7dddb1a6336f29f67e
2013年7月29日 09:48
相关推荐
Java程序在运行过程中可能会遇到各种异常,其中"nested exception is java.lang.OutOfMemoryError: Java heap space"是一个常见的问题,通常发生在程序试图分配超过堆内存限制的空间时。这个错误表明Java虚拟机(JVM...
在Java编程中,`java.sql.SQLException: 结果集已耗尽` 是一个常见的错误提示,通常出现在处理数据库查询结果集时。这个异常表明程序试图访问已经没有数据的结果集中下一行,即所有行已经被遍历完,尝试访问超出范围...
java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK ……
Java.lang.OutOfMemoryError: Java heap space 是 Java 中的一个常见错误,它发生时,Java 虚拟机 (JVM) 无法分配对象,因为堆空间不足。下面是解决该问题的一些方法: 原因分析 1. Java 虚拟机 (JVM) 内存过小:...
在Java程序中,`java.lang.OutOfMemoryError: Java heap space` 是一个常见的错误,意味着程序在运行过程中耗尽了JVM分配的堆内存。这个错误通常发生在创建大量对象或者单个对象占用过多内存时。 一、问题描述与...
在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang.OutOfMemoryError: Java heap space”是一种常见的异常情况,它表明Java虚拟机(JVM)...
java.lang.NoSuchFieldError: Companion 问题的解决方案
Java中的`java.lang.UnsatisfiedLinkError`是一个常见的运行时异常,通常出现在Java试图加载本地(C或C++)库但找不到相应的库文件时。这个错误可能是由于多种原因引起的,如库路径设置不正确、库文件不存在或者版本...
在Java编程中,`java.lang.NoClassDefFoundError` 是一个常见的运行时错误,它发生在类加载器尝试执行一个类,但在类路径中找不到该类的定义时。在这个特定的场景中,问题聚焦于 `net.sf.ezmorph.Morpher` 类。`...
<groupId>com.squareup.okio</groupId> <artifactId>okio <version>2.8.0</version>
由于本机安装的jdk版本与tomcat中使用的jdk版本不一致导致的。 解决方法 后面我把原先tomcat启动环境用的jdk1.7改为了本机安装的jdk1.8就不在报错。 具体过程: 在myeclipse中点击window→preference→在搜索框中...
然而,当你遇到“javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair”的错误时,这意味着在建立SSL/TLS连接时,Diffie-Hellman(DH)密钥交换算法遇到了问题。DH是一种非对称...
- 根据数据库环境和应用需求调整`LARGE_POOL_SIZE`和`JAVA_POOL_SIZE`,特别是在共享服务器环境中或使用Java应用时。 ##### 2. PGA的优化 - **PGA_AGGREGATE_TARGET** - 动态调整此参数,依据Oracle实例可利用...
JavaMail的java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream错误 原因: MyEclipse6.5的javaee.jar中的mail包与JavaMail包有冲突。 解决: 在MyEclipse目录下(D:\Program Files\MyEclipse ...
nested exception is com.sun.jersey.api.client.UniformInterfaceException: PUT http://localhost:8090/picServer/uploads/QQ截图20200220003029.png returned a response status of 400 Bad Request type ...
ORA-29532: Java call terminated by uncaught Java exception: javax.mail.MessagingException: IOException while sending message; nested exception is: javax.activation.UnsupportedDataTypeException: no ...
nested exception is: java.net.BindException: Address already in use: JVM_Bind 这里说的是1099端口被其它进程占用了. 二.解决办法 找出占用1099端口的进程,进入windows命令,查看什么进程占用了1099端口...
总是会出现这样那样的你想不到的问题。崩溃了。首先来罗列一下我遇到过的一些问题吧。 1、大小写敏感 2、连接数超过系统最大连接数 3、Can’t connect to local MySQL server through socket ‘/Data/mydata/mysql....
java.lang.OutOfMemoryError是Java开发者在工作中经常会遇到的一个内存错误。该错误通常发生在JVM无法为新对象分配足够的堆内存时。由于内存问题导致的程序崩溃给开发和维护带来了极大的挑战,而解决这类问题需要对...