DB2 SQL 更新表格数值

3
我想更新一个初始值为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个回答

1
可能发生的情况是,在某个计算中,结果在小数点前有超过6位的数字。
DB2可以处理小数点后比您定义的SCALE还多的数字,但当存在比PRECISION定义允许的更多数字时,它会出现错误(例如您看到的-406)。
顺便提一下,请确保您意识到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

谢谢,我已经弄明白了。非常感谢。 - user1527185

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接