Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » MobiLink - Serveradministration » MobiLink-Ereignisse » Synchronisationsereignisse

 

upload_old_row_insert (Tabellenereignis)

Konfliktlösungsskripten für anweisungsbasierte Upload-Datenströme benötigen normalerweise den Zugriff auf alte und neue Werte für Zeilen, die in die entfernte Datenbank ausgelesen wurden. Mit diesem Ereignis können Sie die alten Werte von ausgelesenen Zeilen in der entfernten Datenbank verarbeiten.

Parameter

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. Weitere Hinweise finden Sie unter SQL-Java-Datentypen und SQL-.NET-Datentypen.

In SQL-Skripten können Sie Ereignisparameter mit ihrem Namen oder mit einem Fragezeichen angeben. Namen und Fragezeichen dürfen jedoch in einem Skript nicht gemischt verwendet werden. 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

s.remote_id

VARCHAR(128). Die entfernte ID von MobiLink. Sie können die entfernte ID nur dann referenzieren, wenn Sie benannte Parameter verwenden.

Nicht anwendbar

s.username

VARCHAR(128). Der MobiLink-Benutzername. Dieser Parameter ist optional.

Optional

r.pk-Spalte-1

Ein Spaltenwert der alten (Pre-Image) Zeile, in der der benannte Parameter als Spaltenname mit dem Präfix r. angegeben ist

1 (2 wenn username referenziert ist)

... ...

r.pk-Spalte-N

Ein Spaltenwert der alten (Pre-Image) Zeile, in der der benannte Parameter als Spaltenname mit dem Präfix r. angegeben ist

N (N+1, falls der Benutzername referenziert wird)

r.Spalte-1

Ein Spaltenwert der alten (Pre-Image) Zeile, in der der benannte Parameter als Spaltenname mit dem Präfix r. angegeben ist

N + 1 (N+2, falls der Benutzername referenziert wird)
... ... ...
r.Spalte-M

Ein Spaltenwert der alten (Pre-Image) Zeile, in der der benannte Parameter als Spaltenname mit dem Präfix r. angegeben ist

N + M (N+M+1, falls der Benutzername referenziert wird)
Standardaktion

Keine.

Bemerkungen

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.

Mit diesem Ereignis können Sie Pre-Image-Werte in einer Tabelle speichern. Dieses Ereignis kann Sie beim Entwickeln von Konfliktlösungsprozeduren für anweisungsbasierte Aktualisierungen 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. Das Ereignis wird auch zum Einfügen von Zeilen im anweisungsbasierten erzwungenen Konfliktmodus verwendet.

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.

Für Java- und .NET-Anwendungen muss dieses Skript gültigen SQL-Code zurückgeben.

Siehe auch
SQL-Beispiel

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'' )' )
Java-Beispiel

Der folgende Aufruf einer MobiLink-Systemprozedur registriert eine Java-Methode namens uploadOldRowInsertTable als das Skript für das Tabellenereignis upload_old_row_insert, wenn die Skriptversion ver1 synchronisiert wird.

CALL ml_add_java_table_script(
  'ver1',
  'table1',
  'upload_old_row_insert',
  'ExamplePackage.ExampleClass.uploadOldRowInsertTable'
)

Im Folgenden sehen Sie die Java-Beispielmethode uploadOldRowInsertTable. Sie generiert dynamisch eine INSERT-Anweisung.

public String uploadOldRowInsertTable() {
  return( "old" + getCols(_curTable) +
    "values" + getNamedParams(_curTable)); 
}
.NET-Beispiel

Der folgende Aufruf einer MobiLink-Systemprozedur registriert eine .NET-Methode namens UploadOldRowInsertTable als das Skript für das Tabellenereignis upload_old_row_insert, wenn die Skriptversion ver1 synchronisiert wird.

CALL ml_add_dnet_table_script(
  'ver1',
  'table1',
  'upload_old_row_insert',
  'TestScripts.Test.UploadOldRowInsertTable'
)

Im Folgenden sehen Sie die .NET-Beispielmethode UploadOldRowInsertTable. Sie generiert dynamisch eine UPLOAD-Anweisung.

public string UploadOldRowInsertTable() {
  return( "old" + GetCols(_curTable) +
    "values" + GetNamedParams(_curTable)); 
}