2012-04-14 3 views
1

Ich verwende Oracle CURSORs zu iterieren große Menge von Datensätzen, um von einer Tabelle in eine andere Tabelle einzufügen. Ich habe festgestellt, dass das Einfügen sehr lange dauert. Gibt es eine alternative Möglichkeit, Massensätze ohne CURSORs zu verarbeiten? Hier sind die Aktivitäten, die ich ausführe.Was ist die alternative Möglichkeit, Bulk-Datensätze in Oracle DB einzufügen?

CURSOR FIRST_TAB(bu_emp_id IN Number) IS 
    SELECT * FROM FIRST_TABLE lst 
    where lst.emp_id = bu_emp_id; 

v_first FIRST_TAB%ROWTYPE; 

CURSOR SECOND_TAB(bu_emp_id IN Number) IS 
    SELECT * FROM SECOND_TABLE 2nd WHERE 2nd.emp_id= bu_emp_id; 

v_second SECOND_TAB%ROWTYPE; 

CURSOR THIRD_TAB(bu_emp_id IN Number) IS 
    SELECT * FROM THIRD_TABLE 3rd WHERE 3rd.emp_id = bu_emp_id; 

v_third THIRD_TAB%ROWTYPE; 
------------------------------------------------------------------------ 

open FIRST_TAB(bu_emp_id); 
    loop 
    fetch FIRST_TAB into r_first; 
    exit when FIRST_TAB %NOTFOUND; 

-- iNSERT STATEMENT------- 

    open SECOND_TAB(bu_emp_id); 
    loop 
     fetch SECOND_TAB into v_second; 
     exit when SECOND_TAB %NOTFOUND; 

-- iNSERT STATEMENT------- 

     open THIRD_TAB(bu_emp_id); 
     loop 
      fetch THIRD_TAB into v_third ; 
      exit when THIRD_TAB %NOTFOUND; 

-- iNSERT STATEMENT------- 

     end loop; 
     close THIRD_TAB; 
    end loop; 
    close SECOND_TAB; 
    end loop; 
    close FIRST_TAB; 
+1

Ich habe Ihren Code formatiert. Bitte machen Sie dies, indem Sie den relevanten Abschnitt markieren und beim Erstellen Ihrer Frage auf die Schaltfläche {} klicken. – Ben

+1

'INSERT ... SELECT 'ist viel schneller als die Verwendung von Cursorn. –

+0

Was versuchst du zu tun? Ihr Code wird überhaupt nicht funktionieren. Namen, die mit einer Zahl beginnen, müssen explizit mit "2nd" versehen werden und Ihr erster Cursor scheint einen Parameter zu benötigen, aber dieser existiert nicht ... Da a_horse_with_no_name vorschlägt, sollten Sie wahrscheinlich einfach ein einfaches 'insert' verwenden. – Ben

Antwort

3

Finden Sie einen Weg, es in geraden SQL zu tun. Aus Ihrem Beispiel ist nicht ersichtlich, ob sich Ihre Daten für diesen Ansatz eignen, aber bemühen Sie sich, dies zu tun. Sie werden die Dinge in einer Anweisung in der Engine nicht vollständig verbessern.

Verwandte Themen