Ein Datenskript, das ein Ereignis liefert, das der MobiLink-Server während der Verarbeitung des Uploads zur Verarbeitung der in der entfernten Datenbank aktualisierten Zeilen verwendet.
In SQL-Skripten können Sie Ereignisparameter mit ihrem Namen oder mit einem Fragezeichen angeben. Die Verwendung von Fragezeichen ist veraltet und es wird empfohlen, benannte Parameter zu verwenden. Sie können nicht Namen und Fragezeichen in einem Skript mischen. Wenn Sie Fragezeichen verwenden, müssen die Parameter in der nachfolgend gezeigten Reihenfolge stehen und sind nur dann optional, wenn keine nachfolgenden Parameter angegeben wurden (z.B. müssen Sie Parameter 1 verwenden, wenn Sie Parameter 2 verwenden möchten). Wenn Sie benannte Parameter verwenden, können Sie beliebige Teilmengen der Parameter in beliebiger Reihenfolge angeben.
Parameter | Beschreibung | Reihenfolge (veraltet für SQL) |
---|---|---|
r.column-1 | Erforderlich. Der erste Nicht-Primärschlüssel-Spaltenwert aus dem neuen Spaltenwert (im Post-Image), referenziert nach Spaltenname oder Spaltennummer. | 1 |
... | ... | ... |
r.column-M | Erforderlich. Der letzte Nicht-Primärschlüssel-Spaltenwert aus dem neuen Spaltenwert (im Post-Image), referenziert nach Spaltenname oder Spaltennummer. | M |
r.pk-column-1 | Erforderlich. Der erste Primärschlüssel-Spaltenwert aus dem neuen Spaltenwert (im Post-Image), referenziert nach Spaltenname oder Spaltennummer. | M + 1 |
... | ... | ... |
r.pk-column-N | Erforderlich. Der letzte Primärschlüssel-Spaltenwert aus dem neuen Spaltenwert (im Post-Image), referenziert nach Spaltenname oder Spaltennummer. | M + N |
o.column-N | Optional. Der erste Nicht-Primärschlüssel-Spaltenwert aus dem alten Spaltenwert (im Pre-Image), referenziert nach Spaltenname oder Spaltennummer. | M + N + 1 |
... | ... | ... |
o.column-M | Optional. Der letzte Nicht-Primärschlüssel-Spaltenwert aus dem alten Spaltenwert (im Pre-Image), referenziert nach Spaltenname oder Spaltennummer. | M + N + M |
Keine.
Die WHERE-Klausel muss alle Primärschlüsselspalten enthalten, die synchronisiert werden. Die SET-Klausel muss alle Nicht-Primärschlüsselspalten enthalten, die synchronisiert werden.
Sie können benannte Parameter in einer beliebigen Reihenfolge verwenden. Derselbe benannte Parameter kann in demselben Skript beliebig oft verwendet werden. In ein Skript mit benannten Parametern können Sie auch eine Teilmenge der Spalten angeben.
Zum Beispiel kann das Skript upload_script für die Tabelle MyTable folgendermaßen geschrieben werden:
UPDATE MyTable SET column_2 = { ml r.column_2 }, column_1 = { ml r.column_1 }, ..., column_M = { ml r.column_M } WHERE pk_column_1 = { ml r.pk_column_1 } AND ... AND pk_column_N = { ml r.pk_column_N } |
Für jede Tabelle in der entfernten Datenbank kann ein upload_update-Skript vorhanden sein.
Dieses Skript muss in SQL implementiert werden. Hinweise zur Java- oder .NET-Verarbeitung von Zeilen finden Sie unter Direkte Zeilenbehandlung.
Um mit dem upload_update-Skript Konflikte festzustellen, müssen Sie alle Nicht-Primärschlüsselspalten in die WHERE-Klausel einbeziehen.
UPDATE table-name SET col1 = {ml r.col1}, col2 = {ml r. col2 } ... WHERE pk1 = {ml r.pk1} AND pk2 = {ml r.pk2} ... AND col1 = {ml o.col1} AND col2 ={ml o.col2} ...
In dieser Anweisung sind col1 und col2 Nicht-Primärschlüsselspalten, pk1 und pk2 hingegen sind Primärschlüsselspalten. Die an die zweite Gruppe von Nicht-Primärschlüsselspalten übergebenen Werte sind das Pre-Image der aktualisierten Zeile. Die WHERE-Klausel vergleicht die alten Werte, die aus der entfernten Datenbank eingelesen wurden, mit den aktuellen Werten in der konsolidierten Datenbank. Wenn die Werte nicht übereinstimmen, wird die Aktualisierung ignoriert, sodass die bereits in der konsolidierten Datenbank enthaltenen Werte erhalten bleiben.
Dieses Skript muss in SQL implementiert werden. Hinweise zur Java- oder .NET-Verarbeitung von Zeilen finden Sie unter Direkte Zeilenbehandlung.
Mit diesem Beispiel werden Aktualisierungen verarbeitet, die in der Tabelle Customer in der entfernten Datenbank vorgenommen wurden. Mit dem Skript werden die Werte in der Tabelle Customer in der konsolidierten Datenbank aktualisiert.
CALL ml_add_table_script( 'ver1', 'table1', 'upload_update', 'UPDATE Customer SET name = {ml r.name}, rep_id = {ml r.rep_id} WHERE cust_id = {ml o.cust_id}') |
Im folgenden Beispiel wird eine ähnliche Aktualisierung ausgeführt. Dabei werden jedoch die alten Werte (aus dem Pre-Image) verwendet, um sicherzustellen, dass die Aktualisierung nur erfolgt, wenn es keinen Konflikt gibt. Wenn es einen Konflikt gibt, wird die Aktualisierung in dieser "Der Erste gewinnt"-Konfliktlösungsrichtlinie ignoriert.
CALL ml_add_table_script( 'ver1', 'table1', 'upload_update', 'UPDATE Customer SET name = {ml r.name}, rep_id = {ml r.rep_id} WHERE cust_id = {ml o.cust_id} AND name = {ml o.name} AND rep_id = {ml o.rep_id}') |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |