Go back to the English version of the documentationData Virtualization中的 SUM() 或 AVG() 函数返回错误
Data Virtualization中的 SUM() 或 AVG() 函数返回错误
Last updated: 2024年11月26日
在某些 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> */
- 有关更多信息,请参阅下列资源: