OCI-22053: 溢出错误
原来sql语句如下:
1 select avg(str.result_value), 2 avg(str.result_value) + stddev(str.result_value) sd1, 3 avg(str.result_value) + stddev(str.result_value) * 2 sd2, 4 avg(str.result_value) - stddev(str.result_value) sd3, 5 avg(str.result_value) - stddev(str.result_value) * 2 sd4 6 from PDS_STUDY_PULL psp 7 join pds_study ps 8 on trim(ps.identity) = trim(psp.header) 9 join SAMP_TEST_RESULT str 10 on trim(str.id_numeric) = trim(psp.created_sample_id)
解决办法:
Oracle 数值数据类型最多可存储 38 个字节的精度。当将 Oracle 数值转换为公共语言运行库数据类型时,小数点后边的位数可能过多,这会导致此错误。
使用round函数
round(字段,精度)
修改成如下sql
修改后sql
1 select round(avg(str.result_value), 2) avg, 2 round(avg(str.result_value) + stddev(str.result_value), 2) sd1, 3 round(avg(str.result_value) + stddev(str.result_value) * 2, 2) sd2, 4 round(avg(str.result_value) - stddev(str.result_value), 2) sd3, 5 round(avg(str.result_value) - stddev(str.result_value) * 2, 2) sd4 6 from PDS_STUDY_PULL psp 7 join pds_study ps 8 on trim(ps.identity) = trim(psp.header) 9 join SAMP_TEST_RESULT str 10 on trim(str.id_numeric) = trim(psp.created_sample_id)