首页 > 代码库 > oracle SQL state [99999]; error code [17026]; 数字溢出
oracle SQL state [99999]; error code [17026]; 数字溢出
org.springframework.jdbc.UncategorizedSQLException: CallableStatementCallback; uncategorized SQLException for SQL [{call updateUser(?, ?, ?, ?, ?, ?)}]; SQL state [99999]; error code [17026]; 数字溢出;
产生背景:
oracle数据库从11g升级到12c调用存储过程的代码是用的spring的StoredProcedure程序中有设置存储过程参数类型new SqlOutParameter("userId",Types.INTEGER)create or replace procedure updateUser(userId in int ....) as...在执行的时候,数据库驱动将传的参数类型和存数过程参数进行转换,报这个错。
原因:我用的旧版本spring的StoredProcedure可能是有个bug
他将你传的参数类型给变了,最后不是integer转int,是long转int,这样12c的驱动在转的时候就会报错。
解决方法:
方法一、把Types.INTEGER换成Types.NUMERIC
这样可能12c上解决了,不知道兼不兼容低版本了,没试过。
方法二、换调存数过程的写法
jt.execute(new ConnectionCallback(){
public Object doInConnection(Connection connection) throws SQLException, DataAccessException {
CallableStatement st = null;
st=connection.prepareCall("{call updateUser(?,?,?,?,?)}");
st.registerOutParameter(1,Types.INTEGER);
st.registerOutParameter(4,Types.INTEGER);
st.registerOutParameter(5,Types.VARCHAR);
st.setInt(1,0);
st.setInt(2,insID);
st.setInt(3,1);
st.setInt(4,1);
st.setString(5,"OK");
st.execute();
CodeName c = new CodeName();
c.setCode("" + st.getInt(4));
c.setName(st.getString(5));
return c;
}
});oracle SQL state [99999]; error code [17026]; 数字溢出
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。