2015-12-17 197 views
0

我有以下簽名存儲過程:SQLServerException:算術溢出錯誤轉換數字數據類型數字

CREATE PROCEDURE my_proc  
     @param1 varchar(4),   
     @param2 varchar(4), 
     @param3 bit, 
     @param4 decimal(14,4), 
     @param5 varchar(10)    
AS 
... 

在java端我有以下代碼:

StoredProcedureQuery proc= entityManager.createStoredProcedureQuery("my_proc"); 
proc.registerStoredProcedureParameter(1, String.class, ParameterMode.IN); 
proc.registerStoredProcedureParameter(2, String.class, ParameterMode.IN); 
proc.registerStoredProcedureParameter(3, Boolean.class, ParameterMode.IN); 
proc.registerStoredProcedureParameter(4, BigDecimal.class, ParameterMode.IN); 
proc.registerStoredProcedureParameter(5, String.class, ParameterMode.IN); 
... 
proc.setParameter(4, new BigDecimal("10000")); 
.... 
proc.execute() 

當代碼我會看到以下異常:

javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: Error calling CallableStatement.getMoreResults 
.... 
Caused by: org.hibernate.exception.SQLGrammarException: Error calling CallableStatement.getMoreResults 
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123) 
.... 
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Arithmetic overflow error converting numeric to data type numeric. 
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216) 

但是這個例外有時有時候 - 不是。看起來這取決於別的東西。但我不知道它可能是什麼。

請幫助理解問題的原因並提供可能的解決方案。

+0

只是一個想法:'proc.setParameter(4,new BigDecimal(「10000.0000」));' – agad

+0

@agad 7此更改不會影響任何內容 – gstackoverflow

+0

可能問題出在SP中。顯示其餘的代碼。 – lad2025

回答

0

問題的實際原因是在存儲過程中。 過程中的數量太大,而中間計算。

相關問題