Die Aktion "Löschen, wenn..."
Mit Hilfe der Datenbankaktion Löschen, wenn... können Daten auf Basis einer Bedingung aus einer Datenbanktabelle gelöscht werden. Sie können diese Aktion über das Dialogfeld "Datenbankaktionen" definieren (siehe Einstellungen für Datenbankaktionen). Wenn Sie z.B. Daten von einer XML-Quelldatei auf eine Zieldatenbank mappen, können Sie eine Löschen, wenn...-Bedingung definieren, um zu überprüfen, ob ein bestimmtes Feld (normalerweise ein Primärschlüsselwert) in der XML-Quelldatei mit einem Feld im Zieldatenbankdatensatz übereinstimmt . Wenn die Löschen, wenn...-Bedingung erfüllt wird (d.h. wenn die beiden Felder gleich sind), so wird der Datenbankdatensatz gelöscht, sobald das Mapping ausgeführt wird.
Anmerkung: | Die Datenbankaktion Löschen, wenn... ist nicht mit der Option Daten in Child-Tabellen löschen aus dem Dialogfeld "Datenbankaktionen" zu verwechseln. Die Datenbankaktion Löschen, wenn... wirkt sich nur auf die Tabelle aus, für die die Aktion definiert ist; andere Tabellen sind davon nicht betroffen. |
In diesem Beispiel wird gezeigt, wie Sie Daten auf Basis einer Bedingung aus einer Datenbanktabelle löschen und auf Basis des Ergebnisses der Lösch-Bedingung Datensätze in dieselbe Datenbanktabelle einfügen.
Im Beispiel werden die folgenden Dateien verwendet:
•altova-cmpy-extra.xml - enthält die Quelldaten, die in die Datenbank eingefügt werden sollen
•Altova_Hierarchical.xsd - das Schema, anhand dessen die obige Instanzdatei validiert wird
•Altova.sqlite - die Zieldatenbank, die aktualisiert werden soll.
Sie finden all diese Dateien im Ordner <Dokumente>\Altova\MapForce2023\MapForceExamples\. Der vollständige Pfad wurde in der Folge aus Gründen der Einfachheit weggelassen.
Im Mapping in diesem Beispiel wird eine Beispieldatenbankdatei geändert. Es wird empfohlen, eine Sicherungskopie der Originaldatenbank zu erstellen und mit einer neuen Kopie zu arbeiten, bevor Sie die unten stehende Anleitung befolgen. Dadurch stellen Sie sicher, dass die Originaldaten nicht überschrieben werden und Sie dasselbe Ergebnis, wie unten beschrieben, erhalten. Nähere Informationen dazu finden Sie unter Ausführen von Mappings, die Datenbanken modifizieren. |
Ziel des Mappings ist das folgende:
•Wenn in der XML-Quelldatei und in der Zieltabelle "Person" Personendatensätze mit demselben PrimaryKey vorhanden sind, müssen diese aus der Tabelle "Person" gelöscht werden.
•Alle anderen Datensätze aus der XML-Quelldatei müssen in die Tabelle "Person" eingefügt werden.
Gehen Sie dazu folgendermaßen vor:
Schritt 1: Fügen Sie die XML-Quellkomponente ein
•Klicken Sie im Menü Einfügen auf XML-Schema/Datei und navigieren Sie zur Datei Altova_Hierarchical.xsd. Wenn Sie aufgefordert werden, eine Instanzdatei anzugeben, navigieren Sie zur Datei altova-cmpy-extra.xml.
Schritt 2: Fügen Sie die Zieldatenbank ein
•Klicken Sie im Menü Einfügen auf Datenbank und befolgen Sie die Anweisungen des Assistenten, um eine Verbindung zu Altova.sqlite herzustellen (siehe Hinzufügen einer Datenbank zum Mapping).
Schritt 3: Ziehen Sie die Verbindungen
•Ziehen Sie die Mapping-Verbindungen wie unten gezeigt.

Schritt 4: Konfigurieren Sie die "Aktualisieren,wenn... Rest einfügen"-Aktionen
1.Klicken Sie in der Zielkomponente auf die Schaltfläche Aktion: Einfügen ( ) neben der Tabelle "Person".
2.Wählen Sie neben Aktion an Datensatz den Eintrag Löschen, wenn... . Dadurch wird die Datenbankaktion in eine auf einer Bedingung basierende Löschaktion geändert, d.h. der aktuelle Datensatz wird nur gelöscht, wenn eine Bedingung erfüllt wird (siehe nächster Schritt).
3. | Wählen Sie neben PrimaryKey den Wert gleich aus, wie unten gezeigt. Damit wird die Löschbedingung definiert, d.h. der Datenbankdatensatz wird nur gelöscht, wenn sein PrimaryKey-Wert gleich dem PrimaryKey-Wert aus dem Mapping ist. |

4. | Aktivieren Sie optional das Kontrollkästchen NULL gleich. In diesem Beispiel spielt das Kontrollkästchen keine Rolle, da weder das Feld PrimaryKey in der XML-Quelldatei noch das Feld PrimaryKey in der Datenbank Nullwerte enthält. Wenn Ihre Daten jedoch Nullwerte enthalten und solche Nullwerte als identisch behandelt werden sollen, sollten Sie dieses Kontrollkästchen aktivieren, da Sie sonst unerwünschte Ergebnisse erhalten könnten. Nähere Informationen dazu finden Sie unter Behandlung von Nullwerten in Datenbankaktionen. |
5. | Klicken Sie auf Aktion anhängen. Daraufhin wird rechts von der vorhandenen Löschen, wenn-Aktion eine neue Aktion hinzugefügt. Konfigurieren Sie die neue Aktion als Rest einfügen: |

In der Abbildung oben wurden die Datenbankaktionen den Zielen des Mappings entsprechend konfiguriert, d.h. der Datensatz wird nur dann gelöscht, wenn die Löschen, wenn..-Bedingung zutrifft. Andernfalls wird der Datensatz eingefügt. Mit der Option "gemappter Wert" wird festgelegt, dass alle Felder des Datensatzes anhand der Werte aus dem Mapping befüllt werden.
6. | Klicken Sie auf OK, um das Dialogfeld zu schließen. Beachten Sie, dass im Mapping anstelle der Schaltfläche Aktion: Einfügen ![]() ![]() |
Schritt 5: Vorschau auf das Mapping und Aktualisieren der Datenbank
Klicken Sie auf das Fenster Ausgabe, um eine Vorschau auf das Mapping zu sehen. Es wird ein SQL-Skript generiert, das Aktionen enthält, die an der Datenbank ausgeführt werden sollen. Das Skript hat die Datenbank noch nicht geändert; dies dient nur zur Vorschau. So führen Sie das Skript an der Datenbank aus:
•Klicken Sie im Menü Ausgabe auf SQL-Script ausführen.
Anmerkung: | Das Ausführen des SQL-Skripts direkt von MapForce aus ist nur eine der Methoden, um eine Datenbank zu aktualisieren. Siehe auch Ausführen von Mappings, die Datenbanken modifizieren. |
Wenn Sie die Tabelle "Person" im Fenster "DB-Abfrage" von MapForce öffnen (siehe Anzeigen und Abfragen von Datenbanken), sehen Sie als Ergebnis des Mappings Folgendes:
•Alle Datenbankdatensätze, für die es Primärschlüsselentsprechungen in der XML-Datei gab, wurden gelöscht. Beispiele dafür sind die Datensätze mit den Primärschlüsseln 1, 2, 3, 4 und 5.
•Alle Datenbankdatensätze, für die es in der XML-Datei keine Primärschlüsselentsprechungen gab, sind unverändert geblieben. Beispiele dafür sind die Datensätze mit den Primärschlüsseln 6, 7, 8, 9, 10, 11, 12 und 13.
•Es wurden neue Datensätze in die Tabelle "Person" eingefügt (Datensätze, für die in der Datenbank noch kein Schlüssel vorhanden war). Beispiele dafür sind die Datensätze mit den Primärschlüsseln 30 und 31.

Die Tabelle "Person" nach Aktualisierung der Datenbank