Oracle ORA-01428参数超出范围报错 如何定位含非法值的id
ORA-01428报错原因
LN()函数仅支持输入大于0的数值,当传入参数为负数、0、或无法转换为合法数值的非数字字符串时,就会触发参数越界错误,这是当前报错的根本原因。
定位含非法值的id的方法
分两步执行查询即可:
- 若
Bmval是字符串类型,先排查无法转换为合法数值的记录:
SELECT DISTINCT id, Bmval FROM Tab_A WHERE REGEXP_LIKE(Bmval, '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$') = 0;
- 再排查数值<=0的异常记录(数值类型的
Bmval可直接执行该查询):
SELECT DISTINCT id, Bmval, pricedate FROM Tab_A WHERE CAST(Bmval AS NUMBER) <= 0;
临时修复建议
如果需要先绕过报错跑出结果,可以在计算时对非法值做兼容处理,例如将非法值默认替换为1(不影响乘积结果):
CAST( EXP( SUM( LN( CAST( CASE WHEN CAST(Bmret.Bmval AS NUMBER) > 0 THEN Bmret.Bmval ELSE 1 END AS NUMBER) ) ) OVER (PARTITION BY bmret.id) ) AS NUMBER) AS Twr
内容的提问来源于stack exchange,提问作者Cecilie S. K
相关产品推荐
相关产品推荐

