【发布时间】:2015-12-17 08:13:52
【问题描述】:
我有带有以下签名的存储过程:
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 7 此更改不会影响任何内容
-
可能问题出在 SP 上。显示其余代码。
-
@lad2025 你是对的
标签: java sql-server stored-procedures numeric mssql-jdbc