其中哪个性能更高。
版本 1使用Cursor For Loop
DECLARE
total_val number(6);
CURSOR c1 IS
SELECT * FROM emp
;
BEGIN
total_val := 0;
FOR emp_rec IN c1
LOOP
total_val := total_val + emp_rec.sal;
END LOOP;
DBMS_OUTPUT.PUT_LINE('TOTAL SALARIES: ' || total_val);
END;
版本 2首先用于Bulk Collect
将所有行放入 PLSQL 集合,然后对其进行迭代。
DECLARE
total_val number(6);
CURSOR c1 IS
SELECT * FROM emp
;
TYPE emp_recs_type IS TABLE OF emp%ROWTYPE;
emp_recs emp_recs_type;
BEGIN
total_val := 0;
OPEN c1;
FETCH c1 BULK COLLECT INTO emp_recs;
CLOSE c1;
FOR l_index IN emp_recs.FIRST..emp_recs.LAST
LOOP
total_val := total_val + emp_recs(l_index).sal;
END LOOP;
DBMS_OUTPUT.PUT_LINE('TOTAL SALARIES: ' || total_val);
END;
请假设Cursor
可能返回许多行,可能是成千上万或更多。