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啟用=真正的;