项目场景:
DB2报错:SQLCODE=-419, SQLSTATE=42911
问题描述:
运行程序时,提示SQLCODE=-419, SQLSTATE=42911
select cash_flow / nvl(CASHFLOW_DISCOUNT,1) from 表A
原因分析:
翻阅资料后发现,十进制除法运算无效。
在DB2除法中,被除数A / 除数B,两个字段的字段类型有小数点的差异,除数B的精度大于A时,就会报错。
cash_flow的字段类型为decimal(30,15),cashflow_discount的字段类型为decimal(25,20),除数的小数点精度20大于了被除数的15
解决方案:
1、直接修改两个字段的字段类型,B的精度小于A。
2、用cast关键字把除数的精度修改。
select cash_flow / cast(nvl(CASHFLOW_DISCOUNT,1) as decimal(25,15)) from 表A