您的位置:首页 > 博客中心 > 数据库 >

oracle SQL state [99999]; error code [17026]; 数字溢出

时间:2022-03-14 02:10

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;                     }                 });

热门排行

今日推荐

热门手游