打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ORA-00600: 内部错误代码, 参数: [qkacon:FJswpri], [0], [], [], [], [], [], []
在使用oracle的递归查询时,出现一个内部错误:

ORA-00600: 内部错误代码, 参数: [qkacon:FJswrwo], [0], [], [], [], [], [], []

出现这个错误的查询SQL语句为:
Sql代码  
  1. //根据流程实例ID查询流程实例信息及其父流程信息  
  2. SELECT pi.id_,  
  3.        pi.start_,  
  4.        pi.end_,  
  5.        pi.roottoken_,  
  6.        pi.superprocesstoken_  
  7. FROM jbpm_processinstance pi  
  8. WHERE pi.issuspended_ = 0  
  9. START WITH pi.id_ = 7211  
  10. CONNECT BY prior (SELECT t.processinstance_  
  11.               FROM jbpm_token t  
  12.              WHERE t.id_ = pi.superprocesstoken_) = pi.id  
_
这段代码的作用就是想从JBPM流程中查找出业务的审批历史信息,由于子流程的存在,所以还要兼顾上级流程的信息。
仔细推敲此查询语句,并没有发现问题的所在,按常理推断,是不应该被SQL解释器拒之门外的,但是这个错误又是怎么出现的呢,继续推断,基本可以肯定的是:connect by不支持从多个表中取出来的记录,所以单张表的递归是没有问题的。另外,查找相关的资料后,发现这是ORACLE connect by 查询的一个BUG,请看下面这段说明:
引用
bug 6729992 - OERI [qkacon:fjswpri] during CONNECT BY query

Range of versions believed to be affected: Versions < 11.2
Versions confirmed as being affected: 10.2.0.3 & 10.2.0.4
Platforms affected: Generic (all / most platforms affected)
This issue is fixed in: 11.2 (Future Release) & 10.2.0.5 (Server Patch Set) & 11.1.0.7 (Server Patch Set)
Description:
Some CONNECT BY queries with "searched case" expressions
can fail with ORA-600 [qkacon:FJswpri].
Workaround:
Set "_optimizer_connect_by_cost_based" = false
被加粗标注出来的正是解决问题的办法,即修改系统参数中_optimizer_connect_by_cost_based的值为false,如下:
Sql代码  
  1. ALTER SESSION SET "_optimizer_connect_by_cost_based" = false;  
再次运行上面的SQL语句,正常处理并得到正常的结果,问题得到解决。

但是,如果作为开发来说,不可能把这样的问题遗留到程序中去,这样的最终结果极有可能导致项目不能正常上线,因为开发环境和运行环境通常不是位于同一台机器上,为了让程序正常运行下去,你不得不记得修改运行环境的参数配置,这倒不是问题的根结,真正的问题在于如果参数被修改,造成的系统运行中不可预知的错误。
根据上面的那段英文描述,oracle应该会在11.2的版本中修改此BUG,但是现在在没有这个版本的前提下,只能另找他途,充分发挥大家的聪明才智之后,最后找到一个圆满解决此问题的办法,那就是修改SQL语句:
Sql代码  
  1. SELECT pi.id_,  
  2.        pi.start_,  
  3.        pi.end_,  
  4.        pi.roottoken_,  
  5.        pi.superprocesstoken_  
  6. FROM jbpm_processinstance pi  
  7. WHERE pi.issuspended_ = 0  
  8. START WITH pi.id_ = 7211  
  9. CONNECT BY prior pi.superprocesstoken_ = pi.roottoken_  
测试通过,才算得是功德圆满
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
如何解决ORA
phpcms v9内容筛选方法
Oracle基础知识
压力测试出现ORA-12519错误
ORA-01715
ORA 1653和ORA 01502错误处理方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服