oracle SQL state [99999]; error code [17026]; 數字溢位
阿新 • • 發佈:2019-01-22
org.springframework.jdbc.UncategorizedSQLException: CallableStatementCallback; uncategorized SQLException for SQL [{call updateUser(?, ?, ?, ?, ?, ?)}]; SQL state [99999]; error code [17026]; 數字溢位;
產生背景:
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資料庫從11g升級到12c 呼叫儲存過程的程式碼是用的spring的StoredProcedure 程式中有設定儲存過程引數型別 new SqlOutParameter("userId",Types.原因:我用的舊版本spring的StoredProcedure可能是有個bug 他將你傳的引數型別給變了,最後不是integer轉int,是long轉int,這樣12c的驅動在轉的時候就會報錯。 解決方法: 方法一、把Types.INTEGER換成Types.NUMERIC 這樣可能12c上解決了,不知道兼不相容低版本了,沒試過。 方法二、換調存數過程的寫法INTEGER) create or replace procedure updateUser(userId in int ....) as ... 在執行的時候,資料庫驅動將傳的引數型別和存數過程引數進行轉換,報這個錯。