2016-08-31 1 views
0

Mein aktuellen Ansatz ist so etwas wiedurch Cursor Looping mit zusätzlichem wählen vs Fetch In

var_row_output tablename%rowtype; 

cursor main_cur IS 
    SELECT id 
    FROM tablename; 

BEGIN 
FOR rec in main_cur LOOP 
    SELECT * 
    INTO var_row_output 
    FROM tablename 
    WHERE id= rec.id; 

-- do stuff 
End Loop; 
END; 

Wäre es besser, mit etwas zu gehen, wie

var_row_output tablename%rowtype; 

cursor main_cur IS 
    SELECT * 
    FROM tablename; 

BEGIN 
LOOP 
    FETCH main_cur into var_row_output; 
    EXIT WHEN main_cur%NOTFOUND; 
    --do stuff 
END LOOP; 
END; 

Wir in der Regel jedes Mal, wenn dem ersten Ansatz an meinem Arbeitsplatz für die Arbeit mit Cursors. Ich bin nur neugierig, ob es einen Leistungseinbruch gibt? Welcher Weg ist vorzuziehen?

Antwort

2

Sie führen in Ihrem ersten Beispiel in jeder Iteration der Schleife eine zusätzliche select aus, so dass dies wahrscheinlich zu einem Leistungseinbruch führen würde. Außerdem ist der Code im zweiten Beispiel prägnanter. Aber ich bevorzuge auch for Schleifen, mit impliziten Cursor, wie folgt:

begin 
    for myrow in (select * from tablename) loop 
    null; -- do stuff with myrow 
    end loop; 
end;