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)

Но это исключение иногда выбрасывает, а иногда нет. Похоже, это зависит от чего-то другого. Но у меня нет идей, что это может быть.

Пожалуйста, помогите понять причину проблемы и предоставьте возможные решения.


person gstackoverflow    schedule 17.12.2015    source источник
comment
Просто идея попробовать: proc.setParameter(4, new BigDecimal("10000.0000"));   -  person agad    schedule 17.12.2015
comment
@agad 7 это изменение ни на что не влияет   -  person gstackoverflow    schedule 17.12.2015
comment
Скорее всего проблема в СП. Показать остальную часть кода.   -  person Lukasz Szozda    schedule 17.12.2015
comment
@lad2025 ты прав   -  person gstackoverflow    schedule 17.12.2015


Ответы (1)


На самом деле причина проблемы была внутри хранимой процедуры. Слишком большое количество было внутри процедуры при промежуточных вычислениях.

person gstackoverflow    schedule 17.12.2015