一个SQL语句引发的ORA-00600错误排查
所以经过上面的排除之后,我们需要重新审视这个语句,看看是否存在一些隐患. 4模拟复现问题经过反复测试之后,我发现这个问题可以很容易复现. 当然我换一个方式来说明,我可以创建一个表,然后模拟这个ORA-00600的错误. 创建测试表test_bug 然后使用如下的语句尝试生成执行计划. 可能眼尖的朋友发现这个里面有些语法问题,这也是我无意中埋下了几个探针,如果你看到语句哪里有问题,后续分析就会明白了. 这个语句里的问题我是可以保持了(select * from test_bug where object_type=’TABLE’) t 这个子查询,抛出了ORA-00600的错误,我简化一番如何,简化为(select*from test_bug)t这个子查询,同样还是会抛出一样的错误. 我们来回过头来翻翻旧账,刚刚的语句的问题在如下红框的几个地方,在解析的时候都没有抛出错误,可见问题是出在这些之前,那么推理只有test_bug相关的子查询了. 修复这几个语法问题之后,使用下面的方式就没有问题了,最后调用成功的语句如下,我们把子查询替换为表test_bug 我们来反思一下,其实我们所写的merge语句都是merge into table_xx using(xxxx) on (xxx)的形式. (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |