View Full Version : SQL INSERT if not exist then update
chrisonline
27-07-09, 10:54
Hallo!
Wie kann ich auf der DB2 ein "Insert if not exist then update" Statement absetzen?
Gibt es sowas?
In MYSQL gibt es das ON DUPLICATE KEY oder REPLACE Statement.
MERGE kann ich leider nicht verwenden, da ich nicht die neueste DB2 Version habe.
Ich muss ein Feld überprüfen und wenn dies existiert, dann den kompletten Satz updaten ansonsten einen neuen Satz schreiben.
Bitte um Hilfe!
Danke!
Grüsse
chrisonline
In der DB2 gibt es kein solches Statement, d.h. Du musst schon mehrere Statements ausführen.
Am einfachsten ist, Du versuchst einen Update. Wurde keine Zeile aktualisiert (kann im embedded SQL über SQLER3 oder über GET DIAGNOSTICS-Statement geprüft werden), den Insert ausführen.
Du kannst natürlich auch zunächst über ein Select-Befehl prüfen ob das Feld bzw. der Inhalt vorhanden ist und je nach dem entweder einen Update oder Insert ausführen.
Übrigens arbeitest Du überhaupt auf der iSeries?
MERGE existiert auch in der 6.1 Version nicht!
Birgitta
chrisonline
28-07-09, 08:56
Oh habe gerade gesehen dass das MERGE Statement auf der DB2 für Linux, Unix und Windows ist und nicht für die iSeries!
Vielen Dank für deinen Beitrag, dann werde ich es wohl mit 2 Statements machen müssen.
Finde ich jedoch schwach dass es sowas nicht gibt für die DB2 auf der iSeries... IBM erhält somit von mir eine Rüge ;-)
Grüsse
Christian
Moin zusammen,
ich wärme dieses Thema mal auf ....
in der Hoffnung das es mittlerweile was gibt.
Create or Replace als Befehl, um die Datei zu erstellen gibt es ja auch (hab's noch nicht gemacht)
Gruß
Robi
... man kann sich natürlich den MERGE zurecht biegen, indem man sich eine "Tabelle" mit einem Satz im SQL Statement virtuell erzeugt, aber ob das was besser macht als die zwei Statements ist Geschmacksache. Mein Geschmack ist jedenfalls: einfache Konstrukte bevorzugen...
D*B
Ja, die 'Hand am Arm' Methode ist schon klar.
aber bei rd. 50 Dateien mit bis zu 30 !!!! Keyfeldern ist das mühsam.
Und da es manchmal etwas dauert, bis sinnvolle Änderungen im SQL bei mir ankommen hoffte, das es hier was neues gibt.
Seit V4R5 gibt es mein Tool SQLCPY, mit dem man genau so was machen kann (neben vielen anderen Dingen).
Ja, die 'Hand am Arm' Methode ist schon klar.
aber bei rd. 50 Dateien mit bis zu 30 !!!! Keyfeldern ist das mühsam.
Und da es manchmal etwas dauert, bis sinnvolle Änderungen im SQL bei mir ankommen hoffte, das es hier was neues gibt.
... bei einem compound Primary key mit 30 Feldern könnte das Problem auch woanders liegen und bei Dateien mit mehreren unique Bedingungen wäre ich mit insert on duplicate key sehr vorsichtig - das wird dann schnell komplex: sieh dir mal die entsprechenden Diskussionen in MySQL und PostgreSQL (upsert) mal an.
Im übrigen könnte man sich da auch noch stored procedures basteln (Default handling kann man generieren und Sonderlocken dann einbauen)
D*B
Das klingt sehr gut und schön!
samsung note 4 handyhülle (http://www.hulle6.com/category-samsung-galaxy-note-4-zubehoer-121.html)
woodstock99
28-07-15, 21:32
Ein Merge funzt doch auf der schwarzen Kiste .......