我正在尝试更新最初设置为0的表值,我正在使用DB2。但是,当我去执行我的SQL时,我收到以下错误:
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
我理解错误的含义,但我不明白为什么我会得到它。这是我的SQL:
UPDATE INTTABLE
SET PAYMENT = DECIMAL((MONTHIRATE*OMA)/(1-POWER(1+MONTHIRATE,-420)),8,2);
PAYMENT定义为DECIMAL(8,2)
有人可以向我解释为什么上述UPDATE语句不起作用吗?
答案 0 :(得分:1)
可能发生的事情是,您正在进行的计算是在小数位前得到超过6位数的结果。
DB2会处理小数位后面的数字多于SCALE
中定义的数字,但是当数字多于允许的数字时,它会出错(使用-406
) PRECISION
已定义。
除此之外,请确保您意识到DECIMAL(8,2)
会在小数点前提供6个位置,在小数点后提供2个位置。
编辑:我认为此查询会显示有问题的行:
SELECT * FROM (
SELECT
A.*
,(MONTHIRATE*OMA)/(1-POWER(1+MONTHIRATE,-420)) AS CALC
FROM INTTABLE A
) B
WHERE CALC > 999999