昨天我问了一个question,得到的答案但没有回答主要问题。我想减少执行MINUS
操作所需的时间。追加到oracle中的游标
现在,我正在考虑在5000个块中做MINUS
操作,将每个迭代结果附加到游标并最终返回游标。 我有以下几点:
V_CNT NUMBER :=0;
V_INTERVAL NUMBER := 5000;
begin
select count(1) into v_cnt from TABLE_1
while (v_cnt > 0)
loop
open cv_1 for
SELECT A.HEAD,A.EFFECTIVE_DATE,
FROM TABLE_1 A
WHERE A.TYPE_OF_ACTION='6' AND A.EFFECTIVE_DATE >= ADD_MONTHS(SYSDATE,-15)
AND A.ROWNUM <= V_INTERVAL
MINUS
SELECT B.head,B.EFFECTIVE_DATE,
FROM TABLE_2 B
AND B.ROWNUM <= V_INTERVAL
V_CNT := V_CNT - V_INTERVAL;
END LOOP;
end;
但是,当你看到......在每次迭代光标被覆盖。我怎样才能更改代码,以便在每次迭代中追加游标而不是覆盖?
用pl/sql执行直连sql是非常困难的。如果操作在直接sql中很慢,它很可能在pl/sql中保持缓慢。 – 2010-03-23 18:47:07
我明白这一点。但是当我以5000的批次执行时,它非常快。 – Omnipresent 2010-03-23 18:48:38
分批5000个查询需要4秒,而8个,所以我很好。在第二次迭代中再次需要4秒...等等。基本上每个连续的查询不应超过8秒。 – Omnipresent 2010-03-23 18:50:51