0 / 0
Volver a la versión inglesa de la documentación
La función SUM() o AVG() devuelve un error en Data Virtualization
Última actualización: 26 nov 2024
La función SUM() o AVG() devuelve un error en Data Virtualization

Es posible que encuentre un error SQL0802N cuando utiliza la función SUM() o AVG() en determinadas sentencias SQL.

Síntomas

La función SUM() o AVG() se utiliza en las sentencias SQL. Es posible que una determinada sentencia SQL falle con el mensaje de error siguiente:
SQL0802N Arithmetic overflow or other arithmetic exception occurred.

Causas

Puede producirse una operación de desbordamiento aritmético cuando se ejecuta una función SUM() o AVG() si el resultado o un tipo intermedio no es lo suficientemente grande para manejar la cantidad de datos procesados. Por ejemplo, es posible que se produzca un desbordamiento aritmético durante la ejecución de SUM () de una columna de entero si la cantidad de datos sumados supera el tamaño máximo de un entero.

En función de dónde se utilice SUM () o AVG () en la consulta, el error también se puede producir si existe un cambio de plan que hace que la función procese más datos y, el resultado o el resultado intermedio es demasiado grande.

Resolución del problema

Para resolver estos problemas, elija uno de los métodos siguientes basándose en la causa y los tipos de datos de los argumentos de función.

  • Cambie el tipo de datos del argumento al que se hace referencia en la función o añada una especificación CAST. Por ejemplo, puede cambiar el tipo de datos del argumento de un INT a un BIGINT (o DECIMAL) o puede convertir el argumento de la función en un BIGINT (o DECIMAL). Si el tipo de datos del argumento es DECIMAL, es posible que se necesite una conversión para ajustar la precisión y la escala de los datos para evitar un desbordamiento.
    Nota: la adición de un CAST puede cambiar el plan de acceso o el rendimiento de la consulta.
  • Inhabilite la agregación anticipada para todas las consultas cambiando la variable de registro de DB2_DV_OVERRIDES. Un administrador de la plataforma debe ejecutar el mandato siguiente desde el pod c-dv2u-cv-db2u-0.
    db2set | grep DB2_DV_OVERRIDES; 
    db2set -im DB2_DV_OVERRIDES="Existing_values, NO_EAGGB";
    db2 flush package cache dynamic; 
  • Inhabilite la agregación temprana para esta consulta añadiendo solo el valor NO_EAGGB como sugerencia del optimizador, tal como se muestra en el ejemplo siguiente.
    select .... 
             SUM() .... 
              /* <OPTGUIDELINES>
                      <REGISTRY>
                      <OPTION NAME='DB2_DV_OVERRIDES'   VALUE='Existing_values,NO_EAGGB'/>
                      </REGISTRY>
                 </OPTGUIDELINES> */
    
  • Para obtener más información, consulte los recursos siguientes:
Búsqueda y respuesta de IA generativa
Estas respuestas las genera un modelo de lenguaje grande en watsonx.ai que se basa en el contenido de la documentación del producto. Más información