是这样的:
开发人员说原来某字符串列是varchar2(1000),后来觉得不够,改成varchar2(4000),然后进行更新update,只要字符串长度到900多就报这个错:
update failed! Exception is java.sql.SQLException: ORA-01483: invalid length for DATE or NUMBER bind variable
这是在jdbc使用绑定变量后运行报的错,但是如果把这条语句直接在sqlplus下执行,则不报错,数据库是redhat下10.1.0.3, 请问有谁遇到过这种问题?是应用层还是数据库端出的错呢?
数据库 oralce 9i 版本9.2.0.1.0
Server: Weblogic 814
数据库连接方式:Hibernate3+DataSource + ConnectionPool
问题:
往数据库中某表插入Blog对象时偶尔(并不是每次都,现象是第一次不出错,之后每次都出错)出错,错误异常:
{org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Could not execute JDBC batch update: encountered SQLException [ORA-01483: invalid length for DATE or NUMBER bind variable]; nested exception is java.sql.BatchUpdateException: ORA-01483: invalid length for DATE or NUMBER bind variable.
java.sql.BatchUpdateException: ORA-01483: invalid length for DATE or NUMBER bind variable
原因分析:
出现这个问题后,使用spring提供的org.springframework.jdbc.datasource.DriverManagerDataSource连数据库执行相同的操作并没有问题,由于使用的是server上配置的DataSource+ConnectionPool,数据库驱动的获取是server选择的。经查找,server选择的是%bea_home%/weblogic81/server/lib/ojdbc14.jar (version 10.1.0.6.0)。用类路径里的驱动替代,该问题不再出现。
解决办法:使用version为10.1.0.4.0的ojdbc.jar代替%bea_home%/weblogic81/server/lib/ojdbc14.jar。