Translation not up to date
The translation of this page does not represent the latest version. For the latest updates, see the English version of the documentation.
Last updated: 31. 3. 2023
Při použití funkce SUM () nebo AVG () v určitých příkazech SQL se můžete setkat s chybou SQL0802N .
Projevy
Funkci SUM () nebo AVG () lze použít ve vašich příkazech SQL. Určité příkazy SQL mohou selhat s touto chybovou zprávou:SQL0802N Došlo k aritmetickému přetečení nebo došlo k jiné aritmetické výjimce.
příčiny
Při spuštění funkce SUM () nebo AVG () může při spuštění funkce SUM () nebo AVG () nastat aritmetické operace přetečení, pokud daný typ zpracování není dostatečně velký, aby mohl zpracovat množství zpracovaných dat. Například aritmetické přetečení může nastat během provedení funkce SUM () celočíselného sloupce, pokud hodnota sečtených dat překračuje maximální velikost celého čísla.V závislosti na tom, kde se v dotazu používá funkce SUM () nebo AVG (), se chyba může také vyskytnout, pokud existuje změna plánu, která způsobí, že funkce bude zpracována více dat, a výsledek nebo mezilehlý výsledek je příliš velký.
Řešení problému
Chcete-li tyto problémy vyřešit, vyberte jednu z následujících metod na základě příčiny a datových typů argumentů funkce.
- Změňte datový typ argumentu, který je odkazován ve funkci, nebo přidejte specifikaci CAST. Např. můžete změnit datový typ argumentu z INT na BIGINT (nebo DECIMAL) nebo můžete přetypovat argument funkce na BIGINT (nebo DECIMAL). Je-li datový typ argumentu DECIMAL, může být zapotřebí přetypování, aby bylo možné upravit přesnost a měřítko dat, aby nedocházelo k přetečení.Poznámka: Přidání příkazu CAST může změnit přístupový plán nebo výkon dotazu.
- Zakažte časnou agregaci pro všechny dotazy změnou proměnné registru DB2_DV_OVERRIDES . Administrátor platformy musí spustit následující příkaz ze sekce
c-dv2u-cv-db2u-0
.db2set | grep DB2_DV_OVERRIDES; db2set -im DB2_DV_OVERRIDES="Existing_values, NO_EAGGB"; db2 flush package cache dynamic;
- Zakažte časnou agregaci pro tento dotaz pouze přidáním nastavení NO_EAGGB jako pokynu optimalizátoru, jak je zobrazeno v následujícím příkladu.
select .... SUM() .... /* <OPTGUIDELINES> <REGISTRY> <OPTION NAME='DB2_DV_OVERRIDES' VALUE='Existing_values,NO_EAGGB'/> </REGISTRY> </OPTGUIDELINES> */
- Další informace viz následující prostředky: