Retourner à la version anglaise de la documentationLa fonction SUM() ou AVG() renvoie une erreur dans Data Virtualization
La fonction SUM() ou AVG() renvoie une erreur dans Data Virtualization
Dernière mise à jour : 26 nov. 2024
Une erreur SQL0802N peut se produire lorsque vous utilisez la fonction SUM() ou AVG() dans certaines instructions SQL.
Symptômes
Vous utilisez la fonction SUM() ou AVG() dans vos instructions SQL. Il arrive que ces dernières échouent avec le message d'erreur suivant :SQL0802N Arithmetic overflow or other arithmetic exception occurred.
Causes
Une opération de dépassement de capacité arithmétique peut se produire lorsque vous exécutez une fonction SUM() ou AVG() si le résultat ou un type intermédiaire n'est pas assez grand pour gérer la quantité de données traitées. Cela peut arriver lors de l'exécution de l'instruction SUM() dans une colonne de type Entier si la quantité de données additionnées dépasse la taille maximale d'un entier.En fonction de l'emplacement de l'instruction SUM() ou AVG() dans la requête, l'erreur peut également se produire lorsqu'un changement de plan entraîne l'exécution d'une plus grande quantité de données par la fonction et que le résultat final ou intermédiaire est trop grand.
Résolution du problème
Pour résoudre ces problèmes, choisissez l'une des méthodes suivantes en fonction de la cause et des types de données des arguments de fonction.
- Modifiez le type de données de l'argument qui est référencé dans la fonction ou ajoutez une spécification CAST. Par exemple, vous pouvez modifier le type de données INT de l'argument en BIGINT (ou DECIMAL), ou transtyper l'argument de la fonction en BIGINT (ou DECIMAL). Si le type de données de l'argument est DECIMAL, un transtypage peut être nécessaire pour ajuster la précision et la taille des données pour éviter tout dépassement.Remarque: l'ajout d'un CAST peut modifier le plan d'accès ou les performances de la requête.
- Désactivez l'agrégation anticipée pour toutes les requêtes en modifiant la variable de registre DB2_DV_OVERRIDES. Un administrateur de plateforme doit exécuter la commande suivante à partir du 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;
- Désactivez l'agrégation anticipée pour cette requête uniquement en ajoutant le paramètre NO_EAGGB en tant qu'indicateur d'optimisation de l'optimiseur comme indiqué dans l'exemple ci-après.
select .... SUM() .... /* <OPTGUIDELINES> <REGISTRY> <OPTION NAME='DB2_DV_OVERRIDES' VALUE='Existing_values,NO_EAGGB'/> </REGISTRY> </OPTGUIDELINES> */
- Pour plus d'informations, voir les ressources suivantes :