Konfliktlösungsskripten für anweisungsbasierte Uploads benötigen normalerweise den Zugriff auf alte und neue Werte für Zeilen, die aus der entfernten Datenbank hochgeladen wurden. Mit diesem Datenskriptereignis können Sie die alten Werte von aus der entfernten Datenbank hochgeladenen Zeilen verarbeiten.
In der folgenden Tabelle stellt die Beschreibung den SQL-Datentyp bereit. Wenn Sie Ihr Skript in Java oder .NET schreiben, müssen Sie den entsprechenden Datentyp benutzen. Siehe SQL-Java-Datentypen und SQL-.NET-Datentypen.
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.
Parametername für SQL-Skripten | Beschreibung | Reihenfolge (veraltet für SQL) |
---|---|---|
s.remote_id |
VARCHAR(128). Die entfernte ID von MobiLink. Sie können die entfernte ID nur dann referenzieren, wenn Sie benannte Parameter verwenden. |
k.A. |
s.username |
VARCHAR(128). Der MobiLink-Benutzername. Dieser Parameter ist optional. |
Optional (1, falls referenziert) |
r.pk-column-1 |
Erforderlich. Der erste Primärschlüssel-Spaltenwert aus der alten Zeile (im Pre-Image), referenziert nach Spaltenname oder Spaltennummer. |
1 (2, falls der Benutzername referenziert wird) |
... | ... | ... |
r.pk-column-N |
Erforderlich. Der letzte Primärschlüssel-Spaltenwert aus der alten Zeile (im Pre-Image), referenziert nach Spaltenname oder Spaltennummer. |
N (N+1, falls der Benutzername referenziert wird) |
r.column-1 |
Erforderlich. Der erste Nicht-Primärschlüssel-Spaltenwert aus der alten Zeile (im Pre-Image), referenziert nach Spaltenname oder Spaltennummer. |
N + 1 (N+2, falls der Benutzername referenziert wird) |
... | ... | ... |
r.column-M |
Erforderlich. Der letzte Nicht-Primärschlüssel-Spaltenwert aus der alten Zeile (im Pre-Image), referenziert nach Spaltenname oder Spaltennummer. |
N + M (N+M+1, falls der Benutzername referenziert wird) |
Keine.
Sendet ein MobiLink-Client eine aktualisierte Zeile an den MobiLink-Server, so enthält diese Zeile nicht nur die neuen Werte (das Post-Image), sondern auch eine Kopie der Werte der alten Zeilen (das Pre-Image). Wenn das Pre-Image nicht mit den aktuellen Werten in der konsolidierten Datenbank übereinstimmt, wird ein Konflikt festgestellt.
Nachdem MobiLink einen Konflikt erkannt hat, können Sie mit diesem Ereignis Pre-Image-Werte in einer Tabelle speichern. Dieses Ereignis kann Sie beim Entwickeln von Konfliktlösungsprozeduren unterstützen. Die Parameter für dieses Ereignis enthalten alte Zeilenwerte aus der entfernten Datenbank, bevor die Aktualisierung in der entsprechenden Tabelle der konsolidierten Datenbank durchgeführt wird. Dieses Ereignis wird auch im Modus "Erzwungener Konflikt" zum Einfügen von Zeilen verwendet. (Der Modus "Erzwungener Konflikt" ist veraltet.)
Die Konflikterkennung erfolgt in der Regel viel schneller, wenn sie im Skript upload_update auf einmal ausgeführt wird. Siehe upload_update (Tabellenereignis).
Das Skript für dieses Ereignis ist gewöhnlich eine Einfügungsanweisung, die die alte Zeile in eine temporäre Tabelle einfügt, damit ein resolve_conflict-Skript darauf zugreifen kann.
Für jede Tabelle in der entfernten Datenbank kann ein upload_old_row_insert-Skript vorhanden sein.
Dieses Skript muss in SQL implementiert werden. Hinweise zur Java- oder .NET-Verarbeitung von Zeilen finden Sie unter Direkte Zeilenbehandlung.
Dieses Beispiel verarbeitet Aktualisierungen in der Tabelle product in der entfernten Datenbank. Mit dem Skript wird der alte Wert der Zeile in eine globale temporäre Tabelle mit dem Namen product_conflict eingefügt. In der letzten Spalte der Tabelle wird die Zeile als alte Zeile gekennzeichnet.
CALL ml_add_table_script( 'ver1', 'table1', 'upload_old_row_insert', 'INSERT INTO DBA.product_conflict ( id, name, size, quantity, unit_price, row_type ) VALUES ( {ml r.id}, {ml r.name}, {ml r.size}, {ml r.quantity}, {ml r.unit_price}, ''Old'' )' ) |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |