今天,一實施同事反應,他執行一存儲過程,執行到一條含有dblink的insert into select語句時報錯:ORA-03150 ORA-02055 ORA-02063,具體報錯如圖所示:
該報錯涉及的SQL語句是:
insert into yhjkb@dblink_jkb
select oae001,
akb020,
akc190,
akc220,
aae072,
akc515,
aka135,
aae100,
akc301,
b.reject_money,
b.reject_reson,
b.oper_user_id,
b.oper_user_name,
b.oper_date,
'0',
'EH',
'EH',
sysdate,
null,
null
from KC22 a
inner join dr_audit b
on a.oae001 = b.prescription_no
and b.load_date > (select syncdate from dr_syncdate)
and a.aae100 = '1';
以下是優化的處理過程:
1、首先,讓其統計了insert into select的select的數據量有3394條,不是太多,但是在執行insert into子查詢select的時候過程很長,有10多分鐘;
2、查看insert into子查詢的sql執行計劃,如下:
3、讓實施同事控制子查詢的數據量爲1條時,雖然執行時間比較長,但是能夠執行成功
4、建議實施同事,根據select子句的where條件對錶kc22的字段AAE100創建了索引,索引創建後,子查詢語句執行速度明顯提升,執行計劃如下:
5、然後,實施同事再次執行insert into select,2分鐘左右成功執行。
問題解決!