Verwenden Sie Cursor-variable einfügen, mit einer Schleife in einer Prozedur speichern

Ich habe eine Prozedur speichern, und ich brauche, um alle ids von einer Tabelle, und fügen Sie neue Zeilen in eine andere Tabelle mit dieser ids die ich aber nicht gut verstehen, die Funktion cursor

PROCEDURE INSERTMDCGENERAL AS

 idCat NUMERIC;
 CURSOR cur IS
    SELECT ID_CAT_FILTROS_TALENTO into idCat FROM MDC_CAT_FILTROS_TALENTO;

  BEGIN 

    FOR v_reg IN cur LOOP
      INSERT INTO MDC_FILTROS_TALENTO(ID_FILTRO,ID_CAT_FILTROS_TALENTO)
               VALUES(SEC_MDC_FILTROS_TALENTO.NextVal,idCat);    
    END LOOP;

COMMIT;

END INSERTMDCGENERAL;
  • Warum verwenden Sie einen cursor? Fügen Sie einfach Ihre select-Anweisung...
  • Es gibt zu viele Zeilen in der Tabelle MDC_CAT_FILTROS_TALENTO, ich habe gelesen, dass ich kann verwenden Sie cursor zu gehen, werfen alle Datensätze
  • Ein cursor wird viel langsamer, weil Sie haben, es zu Bearbeiten, Zeile für Zeile. Wenn Sie haben, um es zu teilen, dann so etwas wie BULK COLLECT auf die parallele Verarbeitung besser wäre. Überlegen Sie, ob Sie wirklich tun dies aber nicht. Wie viele Datensätze sind in der Tabelle und wie lange dauert der standard-insert nehmen?
  • Sie werden tun eine Menge der einzelnen Einsätze, welche nur langsamer sein als eine einzelne insert ... select. Wenn Sie aus der rollback - /undo mit einem einzigen insert (alle kann ich denke, du meinst mit 'zu groß'), dann wird das nicht helfen, wie es ist; Sie kann geändert werden, um zu vermeiden dieses problem, aber es wäre ein patch, der deine DB so groß sein sollte mit der Arbeit zu tun Sie brauchen, es zu tun.
InformationsquelleAutor user2084446 | 2013-10-17
Schreibe einen Kommentar