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

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

Смежные вопросы

 Смежные вопросы