oracle中存储过程执行很长时间,用了三个游标。

2024-12-30 02:28:24
推荐回答(4个)
回答1:

不用看执行计划都知道慢了,
for c1
for c2
for c3
这种没有任何条件的三重循环的时间复杂度为C1记录数*C2记录数*C3记录数,你得尽量减少循环次数,能用sql就不要用游标循环了

回答2:

百万数据量的表,
CURSOR CUR_AC01 IS
SELECT * FROM AC01 FOR UPDATE;
就这样没任何条件,会不会有点夸张了.
尽量使用条件减少参加运算的数据量吧

回答3:

这写得忒复杂啊,具体你要实现什么目的啊?本来游标就不快对于数据量大的,你的过程还嵌套了这么多循环,必须慢呐,说明下你各个表的用途,和最终要实现的目的,大家才好帮你

回答4:

如果是性能问题请给出 AWR、ASH、ADDM及10046 TRACE

alter session set events '10046 trace name context forever,level 8';
执行你的SQL
找到TRACE文件并上传

否则没人能帮你