在调用存过merge into 进行更新数据时出现
ORA-00600: 内部错误代码, 参数: [qerelFetch_10], [], [], [], [], [], [], [], [], [], [], []
存过代码大概如下
CREATE OR REPLACE PROCEDURE sp_test_merge IS
BEGIN
MERGE INTO t_stock s
USING (SELECT o.goods_id, SUM(o.goods_number) goods_number
FROM caiguangcan.t_order@To_ctcore o
WHERE EXISTS
(SELECT 1 FROM t_user t WHERE t.user_code = o.user_code)
GROUP BY o.goods_id) ud
ON (s.goods_id = ud.goods_id)
WHEN MATCHED THEN
UPDATE SET s.goods_stock = s.goods_stock - ud.goods_number;
ROLLBACK;
END sp_test_merge;
后面经过发现当merge into 中using 部分查不到数据时,就会ORA-00600,并且要使用dblink。
比较神奇的是,dblink访问数据库的版本时 11.2.0.1.0
而创建dblink库的版本是 11.2.0.4.0
然后经过测试发现是版本问题,当创建dblink版本月dblink访问数据库版本一致不会出现这个问题。由于dblink访问数据库是生产环境无法升级到11.2.0.4.0 ,这个办法不能解决。
第二个解决方法 是执行mege into 前, 先判断using 中是否有数据,如果没有数据不执行mege into 。
对于这个问题 暂时没有找到真正的原因。