0 / 0
Go back to the English version of the documentation
Data Virtualization中的 SUM() 或 AVG() 函数返回错误
Last updated: 2024年11月26日
Data Virtualization中的 SUM() 或 AVG() 函数返回错误

在某些 SQL 语句中使用 SUM () 或 AVG () 函数时,可能会迂到 SQL0802N 错误。

症状

在 SQL 语句中使用 SUM () 或 AVG () 函数。 某些 SQL 语句可能会失败,并显示以下错误消息:
SQL0802N Arithmetic overflow or other arithmetic exception occurred.

原因

如果结果或中间类型不足以处理已处理的数据量,那么当您运行 SUM () 或 AVG () 函数时,可能会发生算术溢出操作。 例如,如果求和数据量超过整数的最大大小,那么在执行整数列的 SUM () 期间可能会发生算术溢出。

根据查询中使用 SUM () 或 AVG () 的位置,如果存在导致函数处理更多数据的计划更改,并且结果或中间结果过大,那么也会发生错误。

解决问题

要解决这些问题,请根据函数自变量的原因和数据类型选择下列其中一种方法。

  • 更改正在函数中引用的自变量的数据类型或添加 CAST 规范。 例如,可以将自变量的数据类型从 INT 更改为 BIGINT (或 DECIMAL) ,也可以将该函数的自变量强制转换为 BIGINT (或 DECIMAL)。 如果自变量的数据类型为 DECIMAL ,那么可能需要强制类型转换来调整数据的精度和小数位以防止溢出。
    注: 添加 CAST 可能会更改存取方案或查询性能。
  • 通过更改 DB2_DV_OVERRIDES 注册表变量来禁用所有查询的早期聚集。 平台管理员必须从 c-dv2u-cv-db2u-0 pod 运行以下命令。
    db2set | grep DB2_DV_OVERRIDES; 
    db2set -im DB2_DV_OVERRIDES="Existing_values, NO_EAGGB";
    db2 flush package cache dynamic; 
  • 仅通过将 NO_EAGGB 设置添加为优化器提示来对此查询禁用早期聚集,如以下示例中所示。
    select .... 
             SUM() .... 
              /* <OPTGUIDELINES>
                      <REGISTRY>
                      <OPTION NAME='DB2_DV_OVERRIDES'   VALUE='Existing_values,NO_EAGGB'/>
                      </REGISTRY>
                 </OPTGUIDELINES> */
    
  • 有关更多信息,请参阅下列资源:
Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more