Oracle Upsert: Daten effizient aktualisieren oder einfügen
Problem:
Wie können Sie in Oracle einen Upsert-Vorgang durchführen – einen Datensatz aktualisieren, falls vorhanden, oder einen neuen einfügen, wenn dies nicht der Fall ist?
Lösung: Die MERGE
Erklärung
Oracle verfügt nicht über einen dedizierten UPSERT-Befehl. Die MERGE
-Anweisung stellt diese Funktionalität bereit. Es kombiniert effizient Aktualisierungs- und Einfügevorgänge basierend auf einer Join-Bedingung.
Anschauliches Beispiel
Dieses Beispiel zeigt ein Upsert mit der MERGE
-Anweisung innerhalb einer gespeicherten Prozedur:
<code class="language-sql">CREATE OR REPLACE PROCEDURE upsert_data (p_id NUMBER, p_value NUMBER) AS BEGIN MERGE INTO my_table target USING dual source ON (target.id = p_id) WHEN MATCHED THEN UPDATE SET target.value = p_value WHEN NOT MATCHED THEN INSERT (id, value) VALUES (p_id, p_value); END; / -- Sample usage and verification CREATE TABLE my_table (id NUMBER PRIMARY KEY, value NUMBER); BEGIN upsert_data(1, 10); upsert_data(1, 20); -- Update existing row upsert_data(2, 30); -- Insert new row END; / SELECT * FROM my_table;</code>
Diese Prozedur upsert_data
benötigt eine ID und einen Wert. Die MERGE
-Anweisung vergleicht die bereitgestellten p_id
mit vorhandenen IDs in my_table
.
WHEN MATCHED
: Wenn eine Übereinstimmung gefunden wird, wird die Spalte value
auf p_value
aktualisiert.WHEN NOT MATCHED
: Wenn keine Übereinstimmung gefunden wird, wird eine neue Zeile mit den angegebenen p_id
und p_value
eingefügt.Die letzte SELECT
-Anweisung demonstriert die kombinierten Aktualisierungs- und Einfügeergebnisse. Dieser Ansatz ist effizient und vermeidet die Notwendigkeit separater UPDATE
- und INSERT
-Anweisungen mit bedingten Prüfungen.
Das obige ist der detaillierte Inhalt vonWie führe ich mit MERGE einen Upsert-Vorgang in Oracle durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!