Sto cercando di aggiornare un valore di tabella inizialmente impostato su 0, sto lavorando con DB2. Tuttavia, quando eseguo il mio SQL ottengo il seguente errore:
DSNT408I SQLCODE = -406, ERROR: A CALCULATED OR DERIVED NUMERIC VALUE IS NOT
WITHIN THE RANGE OF ITS OBJECT COLUMN
DSNT418I SQLSTATE = 22003 SQLSTATE RETURN CODE
Capisco cosa significa l'errore, ma non capisco perché lo ricevo. Ecco il mio SQL:
UPDATE INTTABLE
SET PAYMENT = DECIMAL((MONTHIRATE*OMA)/(1-POWER(1+MONTHIRATE,-420)),8,2);
Dove PAYMENT è definito come DECIMAL(8,2)
Qualcuno potrebbe spiegarmi perché la dichiarazione UPDATE di cui sopra non funzionerà?
risposte:
1 per risposta № 1Probabilmente quello che sta accadendo è che il calcolo che stai facendo da qualche parte sta ottenendo un risultato con più di 6 cifre prima della cifra decimale.
DB2 gestirà la presenza di più numeri dopo la cifra decimale di quelli definiti nel file SCALE
, ma verrà visualizzato un errore (con l'estensione -406
stai vedendo) quando ci sono più cifre di quelle consentite con il PRECISION
definito.
Per inciso, assicurati di capire che a DECIMAL(8,2)
ti darà 6 posizioni prima del decimale e 2 dopo.
modificare: Penso che questa query ti mostrerà le righe offensive:
SELECT * FROM (
SELECT
A.*
,(MONTHIRATE*OMA)/(1-POWER(1+MONTHIRATE,-420)) AS CALC
FROM INTTABLE A
) B
WHERE CALC > 999999