【问题标题】:SQLServerException: Arithmetic overflow error converting numeric to data type numericSQLServerException:将数字转换为数据类型数字的算术溢出错误
【发布时间】: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


【解决方案1】:

问题的真正原因在于存储过程。 中间计算时,程序内部的数字太大。

【讨论】:

    猜你喜欢
    • 2021-10-29
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多