DB2 SQL更新表值

时间:2013-12-27 03:45:27

标签: sql db2 sql-update

我正在尝试更新最初设置为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语句不起作用吗?

1 个答案:

答案 0 :(得分:1)

可能发生的事情是,您正在进行的计算是在小数位前得到超过6位数的结果。

DB2会处理小数位后面的数字多于SCALE中定义的数字,但是当数字多于允许的数字时,它会出错(使用-406PRECISION已定义。

除此之外,请确保您意识到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