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)
但是這個例外有時有時候 - 不是。看起來這取決於別的東西。但我不知道它可能是什麼。
請幫助理解問題的原因並提供可能的解決方案。
只是一個想法:'proc.setParameter(4,new BigDecimal(「10000.0000」));' – agad
@agad 7此更改不會影響任何內容 – gstackoverflow
可能問題出在SP中。顯示其餘的代碼。 – lad2025