Dieses Dokument behandelt folgende Themen:
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
Gehört zur Funktionsgruppe: Datenbankzugriffe und Datenbankänderungen
Siehe auch MERGE - SQL im Teil Natural for Db2 in der Datenbankmanagementsystem-Schnittstellen-Dokumentation.
Das MERGE
-Statement aktualisiert eine Tabelle mit den
angebenen Eingabedaten. Diejenigen Zeilen in der Zieltabelle, die zu den
Eingabedaten passen, werden gemäß den Angaben aktualisiert, und Zeilen, welche
in der Zieltabelle nicht vorhanden sind, werden eingefügt.
Das MERGE
-Statement gehört zum
SQL Extended Set.
Dieses Statement steht nur bei Natural for Db2 zur Verfügung.
Syntax-Element | Beschreibung |
---|---|
MERGE INTO |
MERGE INTO-Klausel:
|
table-name |
Tabellenname:
Kennzeichnet das Ziel der Siehe table-name specification. |
[AS]
correlation-name
|
[AS]
correlation-name-Klausel:
Gibt einen alternativen Namen für die Zieltabelle an. Der alternative Name kann bei der Referenzierung von Spalten der Zwischenergebnistabelle als Qualifizierungsmerkmal dienen. |
include-columns |
Include Columns-Klausel:
Gibt einen Satz von Spalten an, die gemeinsam mit den
Spalten der Zieltabelle in die Ergebnistabelle des Weitere Informationen siehe include-columns. |
USING
source-table |
USING
source-table-Klausel:
Gibt die Werte für die in der Zieltabelle zusammenzuführenden Zeilendaten an. Siehe |
ON
search-condition |
ON
search-condition-Klausel:
Gibt Bedingungen für eine Zusammenführung (Join) zwischen
Quellentabelle ( |
WHEN MATCHED THEN
update-operation |
WHEN MATCHED THEN
update-operation-Klausel:
Gibt an, welche Aktualisierungsoperation durchgeführt
werden soll, wenn die Suchbedingung
( Siehe Anmerkung weiter unten. |
WHEN NOT MATCHED THEN
insert-operation |
WHEN NOT MATCHED THEN
insert-operation-Klausel:
Gibt an, welche Einfügeoperation
( Siehe Anmerkung weiter unten. |
NOT ATOMIC CONTINUE ON
SQLEXCEPTION |
NOT ATOMIC CONTINUE ON
SQLEXCEPTION-Klausel:
Gibt an, ob die Zusammenführungsverarbeitung fortgesetzt werden soll, falls während der Verarbeitung einer Zeile eines Satzes von Quellenzeilen ein Fehler aufgetreten ist. |
QUERYNO
integer |
QUERYNO
integer-Klausel:
Gibt die Nummer für das SQL-Statement an, welches bei der
|
Anmerkung:
Es muss zumindest die
WHEN MATCHED THEN update-operation-Klausel oder die
WHEN NOT MATCHED THEN insert-operation-Klausel angegeben
werden.
(VALUES |
) | |||
[AS ]
correlation-name (column-name,...)
|
Syntax-Element | Beschreibung |
---|---|
VALUES |
Mit dem Schlüsselwort
VALUES wird die Angabe von Werten für die in die Zieltabelle
einzufügenden Zeilendaten eingeleitet.
|
values-single-row |
Gibt eine einzelne Quellentabellendatenzeile an. Siehe values-single-row. |
values-multiple-row |
Gibt mehrere Quellentabellendatenzeilen an. Siehe values-multiple-row. |
[AS]
correlation-name |
Gibt einen Korrelationsnamen für die Quellentabelle an. |
column-name |
Gibt einen Spaltennamen an, um die
Eingabedaten mit der UPDATE
SET assignment-clause für eine
Aktualisierungsoperation oder mit der VALUES -Klausel für eine
Einfügeoperation zu verbinden.
|
( | ,...) |
Syntax-Element | Beschreibung |
---|---|
expression |
Skalar-Ausdruck:
Gibt einen Skalar-Ausdruck an. Siehe Skalar-Ausdrücke. |
NULL |
NULL-Wert:
Gibt den |
FOR |
host-variable |
ROWS |
|||||||||||||||
( | ,...) |
Syntax-Element | Beschreibung |
---|---|
expression |
Skalar-Ausdruck:
Gibt einen Skalar-Ausdruck an. Siehe Skalar-Ausdrücke. |
host-variable-array |
Host-Variablen-Array:
Gibt ein Benutzervariablen-Array oder einen Indexbereich
eines Array an. Wenn ein
|
NULL |
NULL-Wert:
Gibt den |
FOR ... ROWS |
Anzahl der zusammenzuführenden
Zeilen:
Diese Klausel gibt die Anzahl der zusammenzuführenden
Zeilen an. |
UPDATE SET
assignment-clause |
Syntax-Element | Beschreibung |
---|---|
UPDATE SET |
Gibt an, welche
Aktualisierungsoperation ausgeführt werden soll, wenn die Auswertung ergibt,
dass die Suchbedingung
(search-condition ) wahr ist.
Siehe |
column-name = | expression | ,... | |||||
DEFAULT |
|||||||
NULL |
|||||||
(column-name,...) = ( | expression | ,...) | |||||
DEFAULT |
|||||||
NULL |
INSERT
[(column-name,...)]
VALUES (
|
,...) |
Aktualisieren der Bestandsliste eines Kfz-Vertragshändlers. Hinzufügen eines neuen Fahrzeugmodells zur Bestandsliste bzw. Aktualisieren der Informationen über vorhandes Fahrzeugmodell, welches schon in der Bestandsliste existiert.
DEFINE DATA LOCAL 01 #MODEL (A20) 01 #DELTA (I4) END-DEFINE * Setup input host variables ASSIGN #MODEL = ‘Grand Turbo’ ASSIGN #DELTA := 5 * Insert/Update into INVENTORY table MERGE INTO CDS-INVENTORY T USING (VALUES (:#MODEL, :#DELTA)) AS S(MODEL, DELTA) ON T.MODEL = S.MODEL WHEN MATCHED THEN UPDATE SET T.QUANTITY = T.QUANTITY + S.DELTA WHEN NOT MATCHED THEN INSERT VALUES (S.MODEL, S.DELTA) END TRANSACTION END
Aktualisieren der Bestandsliste eines Kfz-Vertragshändlers. Hinzufügen neuer Fahrzeugmodelle zur Bestandsliste und Aktualisieren der Informationen über vorhande Fahrzeugmodelle, welche schon in der Bestandsliste existieren. Die Eingabe kommt aus Natural-Arrays. Der spezifische Code der Arrays ist in Fettdruck dargestellt.
OPTIONS DB2ARRY ON DEFINE DATA LOCAL 01 #MODEL_ARR (A20/1:20) 01 #DELTA_ARR (I4/1:20)) 01 #ROW-COUNT (I4) 01 #NUM-ERRORS (I4) 01 #SQLCODE (I4) 01 #SQLSTATE (A5) 01 #ROW-NUM (I4) END-DEFINE * Setup input host variables ASSIGN #MODEL_ARR(1) = ‘Grand Turbo’ ASSIGN #DELTA_ARR(1) := 5 ASSIGN #MODEL_ARR(2) = ‘Blue Car’ ASSIGN #DELTA_ARR(2) := 3 . . . * Insert/Update into INVENTORY table CALLNAT 'NDBNOERR' MERGE INTO CDS-INVENTORY T USING (VALUES (:#MODEL_ARR(*), :#DELTA_ARR(*)) FOR 20 ROWS) AS S(MODEL, DELTA) ON T.MODEL = S.MODEL WHEN MATCHED THEN UPDATE SET T.QUANTITY = T.QUANTITY + S.DELTA WHEN NOT MATCHED THEN INSERT VALUES (S.MODEL, S.DELTA) NOT ATOMIC CONTINUE ON SQLEXCEPTION * Check outcome of MERGE PROCESS SQL SYSIBM-SYSDUMMY1 <<GET DIAGNOSTICS :#ROW-COUNT = ROW_COUNT ,:#NUM-ERRORS = NUMBER>> WRITE 'Number of rows merged :' #ROW-COUNT / 'NUMBER OF ERRORS :' #NUM-ERRORS IF #NUM-ERRORS > 0 FOR #I = 1 TO #NUM-ERRORS PROCESS SQL SYSIBM-SYSDUMMY1 <<GET DIAGNOSTICS CONDITION :#I :#SQLCODE = DB2_RETURNED_SQLCODE, :#SQLSTATE = RETURNED_SQLSTATE, :#ROW_NUM = DB2_ROW_NUMBER>> PRINT 'DB2_RETURNED_SQLCODE:' #SQLCODE 'RETURNED_SQLSTATE:' #SQLSTATE 'DB2_ROW_NUMBER:' #ROW_NUM (EM=99Z) END-FOR END-IF END TRANSACTION END