Announcement

Collapse
No announcement yet.

Loop-Schleife mit Cursor

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Loop-Schleife mit Cursor

    Gefunden, danke dir.

    Jetzt mal eine Weitere Frage.
    Also, es sollen immer nachts um 3 Uhr alle neu angelegten Artikel mit einer Lizenzlaufzeit aus der C-entron Datenbank in die eigene Kopiert werden.
    Der Hintergrund ist einfach, dass C-entron nicht mit den Lizenzlaufzeiten umgehen kann und die in der neuen Datenbank mit hinzugefücht werden sollen.
    Das Problem das sich mir bietet ist folgendes:
    Am Tag werden meistens mehrere Artikel angelegt, es müssen also Nachts mehrere Artikel kopiert werden. Dies soll eine Loop-Schleife mit einen Curser
    machen, allserdings habe ich da keine Ahnung von.

    Ich hoffe mir kann jemand einen Anstoß geben, wie ich das am Besten bewältige, und vorallem am performantesten.

    Als Beispiel, was ist davon zu halten?

    Code:
    declare
    v_summe number := 0;
    v_auftrag_pos auftrag_pos%ROWTYPE;
    cursor c_auftrag_pos
    (p_auftrag_nr in auftrag_pos.auftrag_nr%TYPE) is
    select * from auftrag_pos
    where auftrag_nr = p_auftrag_nr;
    begin
    OPEN c_auftrag_pos (4711);
    loop
    FETCH c_auftrag_pos into v_auftrag_pos;
    exit when c_auftrag_pos%NOTFOUND;
    v_summe := v_summe + v_auftrag_pos.anzahl *
    v_auftrag_pos.preis;
    end loop;
    CLOSE c_auftrag_pos;
    end;
    Zuletzt editiert von MFL; 12.12.2012, 16:33.

  • #2
    ? Geht jetzt das Thema wieder von vorne los - oder hab ich irgendetwas wesentliches verpasst?

    Comment


    • #3
      Originally posted by MFL View Post
      Ich hoffe mir kann jemand einen Anstoß geben, wie ich das am Besten bewältige, und vorallem am performantesten.

      Als Beispiel, was ist davon zu halten?

      Code:
      declare
      v_summe number := 0;
      v_auftrag_pos auftrag_pos%ROWTYPE;
      cursor c_auftrag_pos
      (p_auftrag_nr in auftrag_pos.auftrag_nr%TYPE) is
      select * from auftrag_pos
      where auftrag_nr = p_auftrag_nr;
      begin
      OPEN c_auftrag_pos (4711);
      loop
      FETCH c_auftrag_pos into v_auftrag_pos;
      exit when c_auftrag_pos%NOTFOUND;
      v_summe := v_summe + v_auftrag_pos.anzahl *
      v_auftrag_pos.preis;
      end loop;
      CLOSE c_auftrag_pos;
      end;
      Das sieht doch sehr nach Oracle aus, ich dachte die DB ist eine MS SQL.
      Wenn du mit einem Cursor die Datensätze in einer Loop einzeln verarbeitest, ist das i.d.R. nicht besonders schnell. Als Alternative bieten sich hier die Bulk-Operationen an.
      Die grösste Frage, welche sich mir stellt: Du berechnest einen Wert für "v_summe" und machst gar nichts mit der Variable. Fehlt bei dem Code noch etwas?

      Gruss

      Comment


      • #4
        Hallo,
        Originally posted by MFL View Post
        ...Jetzt mal eine Weitere Frage.
        Dann bitte auch einen neuen Thread! Willst du alle deine Fragen in deinem persönlichen Thread stellen? Das ist der Übersicht nicht dienlich! Bei Zusammenhängen kann man ja auf die jeweils andere Frage verweisen.
        Ich hab dafür jetzt einen neuen Thread aufgemacht. Ursprünglich war das hier: Produktdatenbank mit Daten aus der Warenwirtschaftsdatenbank füttern

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment

        Working...
        X