SQLServerException:将数值转换为数据类型numeric的算术溢出错误

时间:2015-12-17 08:13:53

标签: java sql-server stored-procedures numeric mssql-jdbc

我的存储过程带有以下签名:

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)

但这个例外有时会抛出,有时候 - 不是。看起来它取决于其他东西。但我不知道它可能是什么。

请帮助理解问题的原因并提供可能的解决方案。

1 个答案:

答案 0 :(得分:0)

实际上问题的原因是在存储过程中。 在进行中间计算时,内部程序数量过大。