Próbuję zaktualizować wartość tabeli, która początkowo jest ustawiona na 0, pracuję z DB2. Jednak kiedy idę do wykonania SQL, pojawia się następujący błąd:
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
Rozumiem, co oznacza błąd, ale nie rozumiem, dlaczego go otrzymuję. Oto mój SQL:
UPDATE INTTABLE
SET PAYMENT = DECIMAL((MONTHIRATE*OMA)/(1-POWER(1+MONTHIRATE,-420)),8,2);
Gdzie PŁATNOŚĆ jest zdefiniowana jako DECIMAL(8,2)
Czy ktoś mógłby mi wyjaśnić, dlaczego powyższa instrukcja UPDATE nie działa?
Odpowiedzi:
1 dla odpowiedzi № 1Prawdopodobnie dzieje się tak, że obliczenia, które wykonujesz, gdzieś uzyskują wynik zawierający więcej niż 6 cyfr przed miejscem dziesiętnym.
Program DB2 obsłuży liczbę miejsc po przecinku większą niż liczba zdefiniowana w pliku SCALE
, ale wystąpi błąd (z -406
widzisz), gdy jest więcej cyfr niż dozwolone w PRECISION
określone.
Na marginesie, upewnij się, że zdajesz sobie sprawę, że DECIMAL(8,2)
da ci 6 miejsc przed przecinkiem i 2 po nim.
Edytować: Myślę, że to zapytanie pokaże obrażające się wiersze:
SELECT * FROM (
SELECT
A.*
,(MONTHIRATE*OMA)/(1-POWER(1+MONTHIRATE,-420)) AS CALC
FROM INTTABLE A
) B
WHERE CALC > 999999