2015-12-17 196 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

问题的实际原因是在存储过程中。 过程中的数量太大,而中间计算。

相关问题