ARITHMETIC_OVERFLOW错误类

SQLSTATE: 22003

<消息><可选>如果必要的设置<设置>“假”绕过这个错误。

参数

  • 消息:一个表达式的描述导致溢出。

  • 替代:建议如何避免错误。

  • 配置:配置设置来改变ANSI模式。

解释

一个算术溢出发生在砖执行数学运算的最大射程超过数据类型执行的操作。

在许多情况下执行数学最少见类型的操作符的操作数,或最少见的类型参数的函数。

添加类型的两个数非常小的整数很快就会超过类型范围是有限的-128年+ 127。其他类型如时间戳时间间隔也有很多,但有限的范围。

对于一个定义的域类型的定义数据类型

缓解

这个错误的减排取决于原因:

  • 的数学或任何输入参数不正确吗?

    正确使用的功能或输入数据。

    你也可以考虑重新排序操作中间结果保持在所需的范围。

  • 数据类型不是最广泛的类型吗?

    铸造一个扩大类型的参数类型足以完成操作。

    选择小数(38岁s)用一个合适的年代提供了大量的舍入为代价的。

  • 你能容忍溢出条件和用吗吗?

    变化的表达式提出了使用功能替代。例如使用try_sum而不是总和

  • 你不能改变表达式得到包裹的结果,而不是返回一个错误?

    作为最后的手段,通过设置禁用ANSI模式ansiConfig

例子

——一个溢出的一个小数字>选择One hundred.Y*One hundred.Y;(ARITHMETIC_OVERFLOW]One hundred.年代*One hundred.年代引起的溢出如果必要的ansi_mode“假”(除了ANSI时间间隔类型)绕过错误——使用更广泛的数值来执行操作,一个操作数>选择One hundred.Y*(One hundred.Y作为整数);10000年——一个溢出的一个复杂的表达式,可以重写>选择One hundred.Y*10Y/5;(ARITHMETIC_OVERFLOW]One hundred.年代*10年代引起的溢出如果必要的火花sqlansi启用“假”(除了ANSI时间间隔类型)绕过错误——重写表达式>选择One hundred.Y/5*10Y;200年0——偶尔overfklow应该被容忍>选择__arg1*最长(One hundred.Y,One hundred.Y),(20.Y,5Y)作为t(__arg1,最长);(ARITHMETIC_OVERFLOW]One hundred.年代*One hundred.年代引起的溢出如果必要的ansi_mode“假”(除了ANSI时间间隔类型)绕过错误——允许溢出被视为零>选择try_multiply(__arg1,最长)(One hundred.Y,One hundred.Y),(20.Y,5Y)作为t(__arg1,最长);One hundred.——在砖暂时禁用ANSI SQL模式容忍错误的溢出。>ANSI_MODE=;>选择__arg1*最长(One hundred.Y,One hundred.Y),(20.Y,5Y)作为t(__arg1,最长);16One hundred.>ANSI_MODE=真正的;——在砖运行时暂时禁用ANSI模式容忍错误的溢出。>火花sqlansi启用=;>选择__arg1*最长(One hundred.Y,One hundred.Y),(20.Y,5Y)作为t(__arg1,最长);16One hundred.>火花sqlansi启用=真正的;