Einzelnen Beitrag anzeigen

lxo

Registriert seit: 30. Nov 2017
288 Beiträge
 
Delphi 12 Athens
 
#6

AW: Firebird Insert

  Alt 16. Nov 2020, 15:12
Ich bräuchte nochmal eure Hilfe, an sich funktioniert das alles ganz gut mit der Kopier-Prozedur bei Datenbanken mit mehreren Millionen-Datensätzen ist das aber ganz schön langsam alles zu löschen und neu anzulegen für ein Werk.

Alle Wirkstoffe kopieren von ein Werk ins andere wäre aktuell so.
Code:
  procedure KOPIERE_ANZEIGEOPTIONEN ( X_QUELLE_WERKNR type of column WIRK_ANZEIGEOPTIONEN.WERKNR,
                                            X_ZIEL_WERKNR type of column WIRK_ANZEIGEOPTIONEN.WERKNR)
  as
  begin
    delete from WIRK_ANZEIGEOPTIONEN WA
    where WA.WERKNR = :X_ZIEL_WERKNR;

    insert into WIRK_ANZEIGEOPTIONEN (WERKNR, WIRKSTOFF, ANZEIGE, DRUCK)
    select :X_ZIEL_WERKNR, :X_ZIEL_WIRKSTOFF, WA.ANZEIGE, WA.DRUCK
    from WIRK_TIERART WA
    where WA.WIRKSTOFF = :X_QUELLE_WIRKSTOFF and
          WA.WERKNR = :X_QUELLE_WERKNR;
  end


Ich habe mir gedacht das es doch effizienter sein sollte wenn ich nur die Wirkstoffe lösche die es in der Quelle nicht gibt.
Da habe ich dann an "Update or Insert" oder "Merge Into" gedacht ich schaffe es damit jedenfalls alle nötigen Datensätze zu aktualisieren und ggf. fehlende hinzuzufügen.
Schaffe es aber nicht alle nicht mehr nötigen aus dem Ziel zu löschen.

Was ich genau erreichen möchte:
Alle Anzeigeoptionen von Werk 1 nach Werk 2 kopieren.
Alle bisherigen Einträge für Werk 2 sollen überschrieben werden.
Daher ...
- bei Datensätzen die zusammenpassen ein Update.
- bei Datensätzen die im Ziel nicht gefunden werden Insert
- bei Datensätzen die in der Quelle nicht gefunden werden delete.
  Mit Zitat antworten Zitat