由于最近工作中常出现ORA-00600:内部错误代码,参数:[kpnxdcbk-2],[],[],[],[],[],[],[],[],[],[],[]这种异常!所以在这里讲一下我的处理方法。
笔者所遇见的这种异常是因为dblink导致的,如果读者没有使用dblink,就不用看了。
笔者认为dblink主要作用就是传数据,如果要将它使用的更广泛,就有可能出现ORA-00600:内部错误代码,参数:[kpnxdcbk-2],[],[],[],[],[],[],[],[],[],[],[]
由于数据库中涉及dblink的是存储过程,所以就笔者就先测试了一下,结果是在数据库工具pl/sql中是可以通过测试;后来有专门用java代码调用数据库存储过程,奇怪的是,用Java代码和plsql调用同一个存储过程,plsql没问题而java代码调用就报ORA-00600:内部错误代码,参数:[kpnxdcbk-2],[],[],[],[],[],[],[],[],[],[],[]
经多次尝试,发现将存储过程中:
v_sql:='select * from '||v_tableName||' where id='''||v_sampleId||'''';
改为:v_sql:='select * from '||v_tableName||' where id='''||v_sampleId||''''||'and 1=1';
问题就解决了,这是数据库的一个bug,得打补丁,笔者这里没打补丁,就钻个空子,简单的就行,再说升级数据库或者给数据库打补丁都不属于我管的,那是DBA的活,等以后有机会再试着那样解决吧!
上述解决问题的关键就是:试着将查询的sql语句后边跟一个肯定条件,如笔者加上“1=1”;
然而上边的处理方法有时也不能解决问题,比如在开发和测试环境下那样修改就没问题啦,但线上环境还是出错;那怎么办呢?别急,我们可以试试别的方法,我当时
是这样改的
v_sql:='select * from t_area_province ';
改为:v_sql:='select * from t_area_province order by id';
后边加上的是“order by id”,问题就解决了!
还有就是更换数据库驱动包,有同事将ojdbc6.jar,换为classes12.jar,在他本地可以,但我这边试过了,我这边结果还是解决不了,大家可以试试啊!
综上所述,dblink导致的[kpnxdcbk-2],[],[],[],[],[],[],[],[],[],[],[]异常在这里提到四种处理方法,查询sql后加“1=1”、加“order by id(其他字段也试试啊)”和换驱动包笔者试过了,数据库升级和给数据库打补丁没试过,朋友们若有机会可以试试啊!随后,笔者水平有限,若有错误的地方还望高手指点!