0 / 0
Go back to the English version of the documentation
Funkcja SUM () lub AVG () zwraca błąd w programie Watson Query
Last updated: 31 mar 2023
Funkcja SUM () lub AVG () zwraca błąd w programie Watson Query .

Podczas korzystania z funkcji SUM () lub AVG () w niektórych instrukcjach SQL może wystąpić błąd SQL0802N .

Objawy

W instrukcjach SQL używana jest funkcja SUM () lub AVG (). Niektóre instrukcje SQL mogą nie powieść się z następującym komunikatem o błędzie:
SQL0802N Wystąpił przepełnienie arytmetyczne lub inny wyjątek arytmetyczny.

Przyczyny

Operacja przepełnienia arytmetycznego może wystąpić wtedy, gdy uruchamiana jest funkcja SUM () lub AVG (), jeśli wynik lub typ pośredni nie jest wystarczająco duży, aby obsłużyć ilość przetworzonych danych. Na przykład, podczas wykonywania funkcji SUM () kolumny liczby całkowitej może wystąpić przepełnienie arytmetyczne, jeśli suma danych sumowanych przekracza maksymalną wielkość liczby całkowitej.

W zależności od tego, gdzie w zapytaniu jest używany model SUM () lub AVG (), błąd może wystąpić również wtedy, gdy istnieje zmiana planu, która powoduje przetworzenie większej liczby danych przez funkcję, a wynik lub pośredni wynik jest zbyt duży.

Rozwiązanie problemu

Aby rozwiązać te problemy, należy wybrać jedną z następujących metod w oparciu o przyczynę i typy danych argumentów funkcji.

  • Zmień typ danych argumentu, który jest przywoływany w funkcji, lub dodaj specyfikację CAST. Można na przykład zmienić typ danych argumentu z INT na BIGINT (lub DECIMAL), albo można rzutować argument funkcji na BIGINT (lub DECIMAL). Jeśli typem danych argumentu jest DECIMAL, może być potrzebny rzutnik, aby dostosować precyzję i skalę danych, aby zapobiec przepełnieniu.
    Uwaga: Dodawanie CAST może zmienić plan dostępu lub wydajność zapytania.
  • Wyłącz wczesną agregację dla wszystkich zapytań, zmieniając wartość zmiennej rejestrowej DB2_DV_OVERRIDES . Administrator platformy musi uruchomić następującą komendę w sekcji 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; 
  • Wyłącz wczesną agregację dla tego zapytania, dodając ustawienie NO_EAGGB jako wskazówkę optymalizatora, tak jak przedstawiono to w poniższym przykładzie.
    select .... 
             SUM() .... 
              /* <OPTGUIDELINES>
                      <REGISTRY>
                      <OPTION NAME='DB2_DV_OVERRIDES'   VALUE='Existing_values,NO_EAGGB'/>
                      </REGISTRY>
                 </OPTGUIDELINES> */
    
  • Więcej informacji zawierają następujące zasoby:
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