查询报-1201 Number is too small for a DECIMAL data type.

用户执行SQL查询报-1201 错误,表示是decimal数据类型的数值大小,但是这个错误的原因不在于数值的长度而是它的量级(即E之后的量级),有效的是在 1.000E-130 和 1.000E+126 之间。

从用户执行的SQL看,使用了decode(sum(Rsrp11_count),null,1,0,1,sum(Rsrp11_count))操作,
实际使用中,如果不使用decode/case when,而是仅做数值操作,如sum() 并不会返回-1201错误且能正常执行。
当使用了decode/case when等类似操作时,操作过程中也不会有问题,但返回值如果在有效的量级外会报-1201错误。
例:

CASE 
   WHEN sum(Rsrp11_count) is null THEN 1
   WHEN sum(Rsrp11_count) = 0     THEN 1
   WHEN sum(Rsrp11_count) < 1.000E-130 THEN 1
   WHEN sum(Rsrp11_count) > 1.000E+126 THEN 1
   ELSE sum(Rsrp11_count)
END

将sum(Rsrp11_count) 的进行判断转换,不在量级范围内的转换为1,最终返回符合要求,不会报错。

decode(sum(Rsrp11_count),null,1,0,1,sum(Rsrp11_count))
如果sum(Rsrp11_count)的结果不在不在量级范围内,返回其本身,报-1201错误。

标签: none

添加新评论

Free Web Hosting