java.sql.SQLException: ORA-00600: 内部错误代码解决

java.sql.SQLException: ORA-00600: 内部错误代码解决

  • 简介
    • 出现问题的场景
    • 最终解决方法

简介

最近我们公司生产上的服务器突然报错java.sql.SQLException: ORA-00600:,这个错误,一般情况下都没有报错,只有在查询列表时如果某些字段varchar2字段大小为4000的时候就会报错。

出现问题的场景

由于前段时间数据库迁移,然后旧数据库的oracle版本为10gR2的搬迁后的版本为12c,搬迁之前没有这个问题的,搬迁后就有了。具体报错如下:
java.sql.SQLException: ORA-00600: 内部错误代码解决_第1张图片
java.sql.SQLException: ORA-00600: 内部错误代码解决_第2张图片
报错的sql:SELECT * FROM (SELECT P.*, ROWNUM NUM FROM (SELECT NI.NEWS_ID, NI.NEWS_TITLE, NI.NEWS_CONT, NI.NEWS_TYPE, NI.MEMBER_ID, F_GET_STATUS_DESC(‘TF_NEWS_INFO’,‘NEWS_TYPE’,NEWS_TYPE) NEWS_TYPE_NAME, to_char(NI.SEND_DATE, ‘yyyy-mm-dd hh24:mi:ss’) SEND_DATE FROM TF_NEWS_INFO NI WHERE NI.STATUS =‘A’ ORDER BY SEND_DATE DESC ) P WHERE ROWNUM <= 20) TAB WHERE TAB.NUM > 0
放到plsql中执行的时候也是报错,但是如果我把外层的查询嵌套都去掉变成
SELECT NI.NEWS_ID, NI.NEWS_TITLE, NI.NEWS_CONT, NI.NEWS_TYPE, NI.MEMBER_ID, F_GET_STATUS_DESC(‘TF_NEWS_INFO’,‘NEWS_TYPE’,NEWS_TYPE) NEWS_TYPE_NAME, to_char(NI.SEND_DATE, ‘yyyy-mm-dd hh24:mi:ss’) SEND_DATE FROM TF_NEWS_INFO NI WHERE NI.STATUS =‘A’ ORDER BY SEND_DATE DESC
就是去掉分页内容后却可以查询,真是太奇怪了。

最终解决方法

后来我发现在我查询的字段中有一个varchar2的字段的大小为4000,我把它改成3500后就可以了。这边我上网查询了下12c的varchar2的最大值确实是4000没有问题的,但是多加一层select * from()后就会报错,我估计这是一个bug吧。如果有大佬知道具体原理原因的话多多指教哈。

你可能感兴趣的:(oracle)