Merge
Der Zusatz Merge kann zu jedem LOAD- oder SELECT-Befehl im Skript hinzugefügt werden, um anzugeben, dass die geladene Tabelle mit einer anderen Tabelle zusammengeführt werden soll. Er gibt auch an, dass dieser Befehl in einem partiellen Ladevorgang ausgeführt werden soll.
Dies ist in der Regel der Fall, wenn Sie ein Änderungsprotokoll laden und es verwenden möchten, um inserts, updates und deletes auf eine vorhandene Tabelle anzuwenden.
Syntax:
Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)
Während einer normalen (nicht teilweisen) Skriptausführung funktioniert die Konstruktion Merge LOAD wie ein normaler Load-Befehl, aber mit der zusätzlichen Funktionalität, dass ältere obsolete Datensätze und für die Löschung markierte Datensätze entfernt werden. Das erste Feld des load-Befehls muss Informationen über den Vorgang enthalten: Insert, Update oder Delete.
Für jeden geladenen Datensatz wird der Datensatzidentifikator mit zuvor geladenen Datensätzen verglichen, und nur der neueste Datensatz (entsprechend der Sequenznummer) wird beibehalten. Wenn der neueste Datensatz mit Delete markiert ist, wird keiner beibehalten.
Wenn das Präfix Concatenate verwendet wird oder wenn bereits eine Tabelle mit dem gleichen Feldersatz vorhanden ist, ist dies die zu ändernde Tabelle. Andernfalls wird das Ergebnis der Konstruktion Merge LOAD in einer neuen Tabelle gespeichert.
Wenn das Präfix Concatenate verwendet wird, kann die Ergebnistabelle mehr Felder als das Änderungsprotokoll enthalten, das als Eingabe für Merge verwendet wird.
Ein teilweises Laden hat das gleiche Ergebnis wie ein vollständiger Ladevorgang. Der einzige Unterschied besteht darin, dass mit der Konstruktion MergeLOAD nie eine neue Tabelle erstellt wird. Es ist immer bereits eine relevante Tabelle aus der vorherigen Skriptausführung vorhanden, die geändert werden kann.
Wenn das geladene Änderungsprotokoll ein kumuliertes Protokoll ist, das bereits geladene Änderungen enthält, kann der Parameter SequenceNoVar in einem Where-Befehl verwendet werden, um die Menge der Eingabedaten zu beschränken. Merge LOAD kann dann so ausgeführt werden, dass nur Datensätze geladen werden, deren Feld SequenceNoField größer als SequenceNoVar ist. Bei Fertigstellung wird durch Merge LOAD ein neuer Wert zu SequenceNoVar mit dem Höchstwert aus dem Feld SequenceNoField zugewiesen.
Argumente:
Argument | Beschreibung |
---|---|
only | Ein optionaler Qualifizierer, der bewirkt, dass der Befehl nur bei der partiellen Ausführung des Skripts berücksichtigt wird. Bei normalen (nicht partiellen) Skriptausführungen wird er nicht beachtet. |
SequenceNoField | Der Name des Felds mit einem Zeitstempel oder einer Sequenznummer zum Definieren der Reihenfolge der Vorgänge. |
SequenceNoVar |
Der Name der Variablen, welcher der Höchstwert für SequenceNoField der zusammenzuführenden Tabelle zugewiesen wird. |
ListOfKeys | Eine kommagetrennte Liste der Feldnamen, die den primären Schlüssel angeben. |
operation | Das erste Feld des load-Befehls muss den folgenden Vorgang enthalten: Insert, Update oder Delete. ‘i’, ‘u’ und ‘d’ werden ebenfalls akzeptiert. |