Torna alla versione inglese della documentazioneLa funzione SUM() o AVG() restituisce un errore in Data Virtualization
La funzione SUM() o AVG() restituisce un errore in Data Virtualization
Ultimo aggiornamento: 26 nov 2024
Potresti incontrare un errore SQL0802N quando si utilizza la funzione SUM () o AVG () in determinate istruzioni SQL.
Sintomi
Si utilizza la funzione SUM () o AVG () nelle istruzioni SQL. Alcune istruzioni SQL potrebbero non riuscire con il seguente messaggio di errore:SQL0802N Arithmetic overflow or other arithmetic exception occurred.
Cause
Un'operazione di overflow aritmetico potrebbe verificarsi quando si esegue una funzione SUM () o AVG () se il risultato o un tipo intermedio non sono abbastanza grandi per gestire la quantità di dati elaborati. Ad esempio, potrebbe verificarsi un overflow aritmetico durante l'esecuzione di SUM () di una colonna intera se la quantità di dati sommati supera la dimensione massima di un intero.A seconda di dove viene utilizzato il SUM () o AVG () nella query, l'errore può verificarsi anche se esiste una modifica del piano che provoca l'elaborazione di più dati da parte della funzione, e il risultato o risultato intermedio è troppo grande.
Risoluzione del problema
Per risolvere questi problemi, scegliere uno dei seguenti metodi in base alla causa e ai tipi di dati degli argomenti di funzione.
- Modificare il tipo di dati dell'argomento a cui si fa riferimento nella funzione o aggiungere una specifica CAST. Ad esempio, è possibile modificare il tipo di dati dell'argomento da un INT a un BIGINT (o DECIMALE) oppure è possibile inserire l'argomento della funzione a un BIGINT (o DECIMALE). Se il tipo di dati dell'argomento è DECIMALE, potrebbe essere necessario un cast per regolare la precisione e la scala dei dati per prevenire l'overflow.Nota: Aggiunta di un CAST potrebbe modificare il piano di accesso o le prestazioni della query.
- Disabilitare l'aggregazione iniziale per tutte le query modificando la variabile del Registro di sistema DB2_DV_OVERRIDES . Un amministratore della piattaforma deve eseguire questo comando dal 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;
- Disabilitare l'aggregazione anticipata per questa query solo aggiungendo l'impostazione NO_EAGGB come suggerimento dell'ottimizzatore come mostrato nel seguente esempio.
select .... SUM() .... /* <OPTGUIDELINES> <REGISTRY> <OPTION NAME='DB2_DV_OVERRIDES' VALUE='Existing_values,NO_EAGGB'/> </REGISTRY> </OPTGUIDELINES> */
- Per ulteriori informazioni, consulta le seguenti risorse: