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 unten gezeigten Reihenfolge stehen und sind nur dann optional, wenn keine nachfolgenden Parameter angegeben wurden. (Sie müssen beispielsweise 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) |
---|---|---|
s.Skriptversion | VARCHAR(128). Optionaler IN-Parameter, mit dem angegeben wird, dass der MobiLink-Server die bei der aktuellen Synchronisation verwendete Skriptversionszeichenfolge an diesen Parameter übergibt. Fragezeichen können nicht verwendet werden, um diesen Parameter anzugeben. | Nicht anwendbar |
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 |
s.script_version | VARCHAR(128). Optionaler IN-Parameter, mit dem angegeben wird, dass der MobiLink-Server die bei der aktuellen Synchronisation verwendete Skriptversionszeichenfolge an diesen Parameter übergibt. Fragezeichen können nicht verwendet werden, um diesen Parameter anzugeben. | Nicht anwendbar |
Keine.
Die WHERE-Klausel muss alle Primärschlüsselspalten enthalten, die synchronisiert werden, und kann optional auch die Nicht-Primärschlüssel-Spalten enthalten. 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.
Das upload_update-Skript für die Tabelle MyTable kann beispielsweise 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 © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |