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;
                    }
                });
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值