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 Database Management System Interfaces-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.
This statement is available only with Natural for DB2.
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-Variable Array:
Gibt ein Benutzervariablen-Array oder einen Indexbereich eines
Array an. Wenn ein |
NULL |
NULL-Wert:
Gibt den |
FOR ...
ROWS |
Number of Rows to Merge:
This caluse specifies the number of rows to merge. 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