2013-04-04 10 views
6

In MySQL verwenden wirOracle Alternative für MySQL REPLACE INTO

REPLACE INTO 

einzufügen, wenn eine Zeile nicht existiert und zu aktualisieren, wenn es vorhanden ist.

Gibt es einen entsprechenden Befehl in Oracle?

+1

Verwenden 'nicht INTO' in MySQL REPLACE, sondern verwenden' INSERT ... ON DUPLICATE KEY UPDATE'. – Quassnoi

+0

siehe auch http://stackoverflow.com/questions/237327/oracle-how-to-upsert-update-or-insert-into-a-table/2692441#2692441 – user123444555621

Antwort

7
MERGE 
INTO destTable d 
USING (
     SELECT * 
     FROM sourceTable 
     ) s 
ON  (s.id = d.id) 
WHEN NOT MATCHED THEN 
INSERT (id, destCol1, destCol2) 
VALUES (id, sourceCol1, sourceCol2) 
WHEN MATCHED THEN 
UPDATE 
SET  destCol1 = sourceCol1, 
     destCol2 = sourceCol2 
+0

Benötige ich eigentlich eine andere Tabelle, von der aus fusionieren? Oder gibt es eine Möglichkeit, die Daten in den Befehl aufzunehmen? – user123444555621

+0

Um meine eigene Frage zu beantworten, denke ich, dass es mit 'dual' gemacht werden kann: http://www.idevelopment.info/data/Oracle/DBA_tips/SQL/SQL_5.shtml – user123444555621