A função SUM() ou AVG() retorna um erro na Data Virtualization

É possível que você encontre um erro SQL0802N ao usar a função SUM() ou AVG() em certas instruções SQL.

Sintomas

Você usa a função SUM() ou AVG() em suas instruções SQL. Determinada instrução SQL podefalhar com a mensagem de erro a seguir:
SQL0802N Arithmetic overflow or other arithmetic exception occurred.

Causas

Uma operação de estouro aritmético poderá ocorrer quando você executar uma função SUM() ou AVG() se o resultado ou um tipo intermediário não for grande o suficiente para manipular a quantidade de dados processados. Porexemplo, um estouro aritmético poderá ocorrer durante a execução de SUM() de uma coluna de número inteiro sea quantia de dados somados exceder o tamanho máximo de um número inteiro.

Dependendo de onde o SUM() ouo AVG() for usado na consulta, o erro também poderá ocorrer se existir uma mudança de plano que faça com que mais dadossejam processados pela função e que o resultado ou o resultado intermediário seja muito grande.

Resolvendo o problema

Para resolver esses problemas, escolha um dos métodos a seguir com base na causa e nos tipos de dados dos argumentos da função.

  • Mude o tipo de dados do argumento que está sendo referenciado na função ou inclua uma especificaçãoCAST. Por exemplo, é possível mudar o tipo de dados do argumento de um INT para um BIGINT (ouDECIMAL) ou é possível lançar o argumento da função para um BIGINT (ou DECIMAL). Se o tipo de dados doargumento for DECIMAL, um cast poderá ser necessário para ajustar a precisão e a escala dos dados paraevitar o estouro.
    Nota: Adicionando um CAST pode alterar o plano de acesso ou o desempenho da consulta.
  • Desative a agregação antecipada para todas as consultas mudando a variável de registro DB2_DV_OVERRIDES. Um administrador de Plataforma deve executar o comando a seguir por meio do 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; 
  • Desative a agregação antecipada somente para esta consulta incluindo a configuração NO_EAGGB como uma sugestão de otimizador, como mostrado no exemplo a seguir.
    select .... 
             SUM() .... 
              /* <OPTGUIDELINES>
                      <REGISTRY>
                      <OPTION NAME='DB2_DV_OVERRIDES'   VALUE='Existing_values,NO_EAGGB'/>
                      </REGISTRY>
                 </OPTGUIDELINES> */
    
  • Para obter mais informações, consulte os recursos a seguir: