您好,欢迎访问一九零五行业门户网

ORA-01455报错的问题探究

昨天同事说有个应用执行某个特殊操作时会报:ora-01455: converting column overflows integer datatype,网上包括mos上对1455报
昨天同事说有个应用执行某个特殊操作时会报:ora-01455: converting column overflows integer datatype
网上包括mos上对1455报错介绍更多的是在做exp导出时可能出现这个问题。
1087122.1介绍:
“当创建使用初始值超过10位的序列时,可能会出现如下问题:
ora-01455: converting column overflows integer datatype
ora-06502 pl/sql: numeric or value error: number precision too large
app-01564: oracle error 1455 in fdsgsv
ora-01455: converting column overflows integer datatype.
arzira: error from fdsnxt:2
app-ar-11526: ora-01403: no data found
no errors but the document number generated is 0
产生的原因可能是:
1、通常在c代码中使用定长来创建序列号,最大值允许10位。有时可能会替换一些代码,来调用plsql处理超过10位的序列号,可并没有全部替换。
2、展示编号的工作台仅允许15位。
解决方案:
一旦已经使用了序列号,那么就不能修改初始值了。唯一的方法就是创建一个新的序列号,取一个耕地的初始值,然后重新赋予到正使用旧序列号的范畴。如果使用的是无间隔的序列,重新初始化序列号可能会带来更复杂的事情。”
针对这个报错,仔细询问了下,是执行select语句,带一个特殊的过滤条件时会报这个错误,其它的过滤条件则不会报错,说明很可能是这个特殊过滤条件对应的记录中有些小问题,经过同事的排查,确定是其中一条记录的某个字段,oracle中定义的是number(10)类型,实际值是8开头的10位数,但应用程序中使用的getint()获取,integer的取值是-2^15-2^15-1,显然该值超过了integer允许的最大值,因此在执行select时会报错,将getint()改为getdouble()即可。
总结:
根据报错的提示内容:converting column overflows integer datatype,可以检查是否有表定义的字段类型和程序中定义的变量类型不匹配,导致精度长度无法对应,,造成转换过程中超过integer类型的长度,也就是说字段类型和变量类型一定要对应。
其它类似信息

推荐信息