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.